美文网首页
ios 取出字符串中第一个不相同元素的下标 比如字符串为@"ac

ios 取出字符串中第一个不相同元素的下标 比如字符串为@"ac

作者: 画舫烟中浅 | 来源:发表于2019-03-20 15:44 被阅读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;
}

相关文章

网友评论

      本文标题:ios 取出字符串中第一个不相同元素的下标 比如字符串为@"ac

      本文链接:https://www.haomeiwen.com/subject/gdzzmqtx.html