给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
示例
s = "leetcode"
返回 0
s = "loveleetcode"
返回 2
解题思路:
1 第一种最开始的思路是逐个字符去做循环遍历,但是这个方案并不是最优的,遍历的次数,是n*n+1次。所以如果遇到字符串很长的话,会有问题 “超出时间限制”
public int FirstUniqChar(string s){
for (int n = 0; n < s.Length; n++)
{
bool isSame = false;
for (int i = s.Length-1; i >=0; i--)
{
if (i!=n && s[n] == s[i])
{
isSame = true;
}
}
if (!isSame)
return n;
}
return -1;
}
2 还有一种方案就是遍历两次,第一次遍历,把字符和字符的数量,存入哈希字典。第二次遍历去查询数量,如果是1的话就是符合条件的字符,直接返回,没有的话返回-1;
public int FirstUniqChar(string s)
{
Dictionary<char,int> _dic = new Dictionary<char, int>();
for (int n = 0; n < s.Length; n++)
{
if (!_dic.ContainsKey(s[n]))
{
_dic.Add(s[n],1);
}
else
{
_dic[s[n]]++;
}
}
for (int i = 0; i < s.Length; i++)
{
if (_dic[s[i]] == 1)
return i;
}
return -1;
}

你们如果有好的思路欢迎讨论~~
一起刷题呀~~ 欢迎一起交流
QQ群 :665343902
以上都是都是引用的leetcode网站内容,若有侵权联系我~
1573

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



