第一種思路:把字符串中的每一個(gè)元素設(shè)置為可變字典的key寸莫,把元素出現(xiàn)的次數(shù)作為可變字典的value坷檩。然后在遍歷字符串一次取出key。最后在可變字典中判斷key對應(yīng)的value值货抄。若值為1漆改,則輸出下標(biāo),并且return满着。
比如字符串為@"accbasddh",則鍵a對應(yīng)的值為2谦炒,c對應(yīng)的值為2贯莺,而b對應(yīng)的值為。則輸出b的下標(biāo)宁改。
代碼如下:
-(NSInteger) inputStr:(NSString *) string{
if (!string) {
return -1;
}
NSMutableDictionary *mubDic = @{}.mutableCopy;
// 遍歷字符串缕探,并把字符串的元素添加到字典中
for (int i = 0; i<string.length; i++) {
NSString *key = [NSString stringWithFormat:@"%c",[string characterAtIndex:i]];
// 計(jì)算元素出現(xiàn)的次數(shù)
NSInteger count = [[mubDic valueForKey:key] integerValue];
count ++;
// 給字典設(shè)置映射關(guān)系
[mubDic setValue:@(count) forKey:key];
}
// 遍歷字符串
for (int j = 0; j<string.length; j++) {
NSString *key = [NSString stringWithFormat:@"%c",[string characterAtIndex:j]];
// 取出key 并在字典中取出key的值 判斷是否等于1 出現(xiàn)第一個(gè)就返回
if ([[mubDic valueForKey:key] integerValue] == 1) {
NSLog(@"不相同的字母是%@",key);
return j+1;
}
}
return -1;
}
第二種思路:采取雙重for循環(huán)遍歷。
#pragma mark - 輸出字符串中第一個(gè)沒有重復(fù)字母的下標(biāo)
- (NSInteger ) inputString:(NSString *) str{
NSArray *arr = [self subStringWithNoSpace:str];
NSInteger count = arr.count;
int i;
int j;
int num = 0;
if (count<=0) {
return -1;
}
for ( i = 0; i<count; i++) {
for ( j = 0; j<count; j++) {
if (i==j) {
continue;
}
if (arr[i] == arr[j]) {
break;
}
}
if (j == count) {
num = i+1;
NSLog(@"不相同的字母是%@",arr[i]);
break;
}
}
if (i == count) {
num = -1;
}
return num;
}
#pragma mark - 將字符串轉(zhuǎn)換成數(shù)組
- (NSArray *)subStringWithNoSpace:(NSString *)text {
NSMutableArray *textArray = @[].mutableCopy;
for (NSInteger i = 0; i < text.length; i++) {
NSString *str = [text substringToIndex:1];
text = [text substringFromIndex:1];
i = 0;
[textArray addObject:str];
if (text.length == 1) {
[textArray addObject:text];
}
}
return textArray;
}