版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21275321/article/details/83107642
题目:
Given a string, find the first non-repeating character in it and return it’s index. If it doesn’t exist, return -1.
Examples:s ="leetcode" return 0. s = "loveleetcode", return 2.
Note: You may assume the string contain only lowercase letters.
解释:
返回字符串中第一个仅出现一次的字母在数组中的index。第一反应是遍历字符串,暴力count。
python代码:
from collections import Counter
class Solution(object):
def firstUniqChar(self, s):
"""
:type s: str
:rtype: int
"""
_dict=Counter(s)
for i in xrange(len(s)):
if _dict[s[i]]==1:
return i
return -1
python中,有find()
和rfind()
(返回字符串最后一次出现的位置),如果字符串中某个字母只出现过一次,那么find()
的结果与rfind()
的结果一样,前提是要先把字母表打出来,这样速度更快。
python代码:
from collections import Counter
class Solution(object):
def firstUniqChar(self, s):
"""
:type s: str
:rtype: int
"""
alphas="qwertyuiopasdfghjklzxcvbnm";
min_index=len(s)
for letter in alphas:
index1=s.find(letter)
index2=s.rfind(letter)
if index1!=-1 and index1==index2:
min_index=min(min_index,index1)
return min_index if min_index!=len(s) else -1
c++代码:
class Solution {
public:
int firstUniqChar(string s) {
string alphas="qwertyuiopasdfghjklzxcvbnm";
unsigned long int min_index=s.size();
for (auto letter:alphas)
{ auto index1=s.find(letter);
auto index2=s.rfind(letter);
//cout<<letter<<" "<<index1<<" "<<index2<<endl;
if (index1!=string::npos && index1==index2)
{
min_index=min(min_index,index1);
//cout<<letter<<" "<<min_index<<endl;
}
}
return min_index==s.size()?-1:min_index;
}
};
总结:
string find()
系列函数,返回类型是size_type
实际上是unsigned long int
,注意不是int
,也注意不要把size_type
强制转换为int
。