1. 题目描述
在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
2. 思路分析
先简单说一下暴力破解的思路吧。暴力破解就依次对每一个字符进行判断,遍历字符串中的字符,看看是否跟他有相等的字符,没找到的话,函数就返回当前字符,找到了的话就对下一个字符进行遍历判断,如果到最后一个字符都没有找到只出现一次的字符,那就返回-1。
暴力破解的时间复杂度太大了,所以想到了用hash。首先对字符串中的字符进行遍历,记录出现的字数为当前字符的hash值,然后遍历hash表,返回第一个值为一的hash关键字。这种方法的时间复杂度最坏情况是O(n)。
3. 题目解答——cpp
class Solution {
public:
int FirstNotRepeatingChar(string str) {
if (str.empty())
return -1;
unsigned char hash[256] = {0}; // 定义hash
for(auto &i : str) {
hash[i]++;
}
for(int i = 0; i < str.size(); i++) {
if (hash[str[i]] == 1)
return i;
}
return -1;
}
};