题解 | #第一个只出现一次的字符#

第一个只出现一次的字符

http://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c

审题很重要

str中大小写字母都有,区分开来

因此:

  1. 不能只考虑示例中的小写字母
  2. 将大小写字母区分统计

返回:第一个出现的字符的下标

因此,凡是设计排序的方法都不可行:

  1. 不能用集合方法来解决
  2. sort()、unique()的思路都不可取
  3. 遍历要遍历原字符串,不能遍历哈希数组,不然没法得到下标

算法

  1. 把字符当哈希key,字符出现次数当哈希value
  2. 遍历字符串,构造哈希数组
  3. 遍历字符串,判断哈希数组中的值是否为1,进而判断该字符是否第一次出现
#include<algorithm>
class Solution {
public:
    int FirstNotRepeatingChar(string str) {
        //写个集合;
        //现将字符排一下序
//         sort(str.begin(),str.end());
//         str.erase(unique(str.begin(),str.end()),str.end());
        if(str.empty()) return -1;
        vector<int> a(128,0);
        for(int j=0;j<str.length();j++) a[str[j]]++;
//             if(65<=str[j]&str[j]<=90) a[str[j]-'A']++; //大写字母从0到25
//             else a[str[j]-71]++; //小写字母从26到51

        for(int j=0;j<str.length();j++){
            if(a[str[j]]==1) return j;
        }
        return -1;
//         for(int k=0;k<52;k++){
//             if(a[k]>1) return 
//         }
        //这样处理后的字符串无重复字符
    }
};
全部评论

相关推荐

球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务