ios 取出字符串中第一个不相同元素的下标 比如字符串为@"ac
2019-03-20 本文已影响0人
画舫烟中浅
第一种思路:把字符串中的每一个元素设置为可变字典的key,把元素出现的次数作为可变字典的value。然后在遍历字符串一次取出key。最后在可变字典中判断key对应的value值。若值为1,则输出下标,并且return。
比如字符串为@"accbasddh",则键a对应的值为2,c对应的值为2,而b对应的值为。则输出b的下标。
代码如下:
-(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]];
// 计算元素出现的次数
NSInteger count = [[mubDic valueForKey:key] integerValue];
count ++;
// 给字典设置映射关系
[mubDic setValue:@(count) forKey:key];
}
// 遍历字符串
for (int j = 0; j<string.length; j++) {
NSString *key = [NSString stringWithFormat:@"%c",[string characterAtIndex:j]];
// 取出key 并在字典中取出key的值 判断是否等于1 出现第一个就返回
if ([[mubDic valueForKey:key] integerValue] == 1) {
NSLog(@"不相同的字母是%@",key);
return j+1;
}
}
return -1;
}
第二种思路:采取双重for循环遍历。
#pragma mark - 输出字符串中第一个没有重复字母的下标
- (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 - 将字符串转换成数组
- (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;
}