NC31 第一个只出现一次的字符
题意分析:
找出字符串中只出现过一次,且最先出现字符的下标。
示例:google
返回:4
解释:字符l只出现了一次,且在是第一次出现,l的下标为4。
题解一(暴力):
我们假设某个位置的字符是最后结果,与其他字符做比较,如果发现没有相同的,直接返回,有,则判断下一个
int FirstNotRepeatingChar(string str) {
for(int i=0;i<str.size();i++){
//假设位置i处为最后结果,与其他位置做比较
int j = 0;
for(;j<str.size();j++){
if(str[i]==str[j]&&j!=i){
break;
}
}
if(j==str.size()){
//当遍历结束后,依然没有发现有相同元素,返回即可
return i;
}
}
return -1;
} 题解二(哈希):
先遍历一遍字符串,对字符串中各个字符进行统计。再遍历一遍字符串,根据统计结果看哪个字符只出现了一次,且是最早出现的。
假设字符串为google:
代码实现如下:
int FirstNotRepeatingChar(string str) {
unordered_map<char, int>character;
//先统计每个字符出现的次数
for(int i=0;i<str.size();i++){
character[str[i]]++;
}
//遍历字符串,找出哪个字符出现了一次
for(int i=0;i<str.size();i++){
if(character[str[i]]==1){
return i;
}
}
return -1;
} 时间复杂度:,假设unorder_map查看元素时间复杂度为
,其总时间复杂度为
空间复杂度:,unorder_map大小与字符串中字符种类有关,非确切上界为n,n为字符串长度。

京公网安备 11010502036488号