题目:
-
题目描述:
字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。 -
示例:
s = “leetcode”
返回 0
s = “loveleetcode”
返回 2 -
提示:你可以假定该字符串只包含小写字母
分析:
代码:
- 暴力求解法
class Solution {
//暴力求解
public:
int firstUniqChar(string s)
{
int j;
for(int i = 0; i < s.size(); ++i)
{
for( j = 0; j < s.size(); ++j)
{
if( j == i)
continue;
if(s[j] == s[i])
break;
}
if(j >= s.size())
return i;
}
return -1;
}
};
- 进阶法——哈希求法
class Solution {
//暴力求解
public:
int firstUniqChar(string s)
{
//0~255 hash[0] ~hash[255]
int hash[256] = {0};
for(int i = 0;i <s.size();++i)
hash[s[i]]++;
for(int i = 0;i <s.size();++i)
{
if(hash[s[i]]==1)
return i;
}
return -1;
}
};
- 第三种方法
我们从头和尾分别开始,只要找到的这个字母的下标是同一个,那这个字母就只出现了一次。
class Solution {
public:
int firstUniqChar(string s) {
for(int i = 0;i<s.size();++i)
{
int index = s.find(s[i]);
int r_index = s.rfind(s[i]);
if(index == r_index)
return i;
}
return -1;
}
};
结果:
效率明显提升~~