题目描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
用一个大小为52的数组记录每个字母出现的次数,然后在用一遍遍历,找出第一个只出现一次的字符。复杂度O(n)
class Solution {
public:
int FirstNotRepeatingChar(string str) {
// 大小写共52个字母
vector<int> map_table(52,0);
for (int i=0;i<str.length();i++) {
if((int)str[i]>='a') {
map_table[(int)str[i]-'a'+26]++;
} else {
map_table[(int)str[i]-'A']++;
}
}
for (int i = 0; i < str.length(); i++)
{
int index=0;
if((int)str[i]>='a') {
index=(int)str[i]-'a'+26;
} else {
index=(int)str[i]-'A';
}
if(map_table[index]==1) {
return i;
}
}
return -1;
}
};
本文介绍了一种高效的算法,用于在字符串中查找第一个仅出现一次的字符,并返回其位置。通过使用大小为52的数组记录字母出现次数,实现O(n)的时间复杂度。
229

被折叠的 条评论
为什么被折叠?



