Question
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)。
*关键词:字符串 *
Solution
暴力遍历
最朴素的思考,一次遍历记录每个字符第一次的位置和出现的次数,第二次遍历找到只出现一次的字符并且顺便找一下这些字符最小的位置。
时间复杂度:O(N在这里插入代码片
)
空间复杂度:O(2N)
- Python
class Solution:
def FirstNotRepeatingChar(self, s):
index = {}
count = {}
for i in range(len(s)):
if s[i] not in index.keys():
index[s[i]] = i
count[s[i]] = 0
count[s[i]] += 1
min_index = len(s)
for ss in count.keys():
if count[ss]==1:
min_index = min(min_index, index[ss])
return min_index if min_index!=len(s) else -1
- C++
class Solution {
public:
int FirstNotRepeatingChar(string str) {
map<char, int> count;
for(int i=0; i<str.size(); i++){
count[str[i]]++;
}
for(int i=0; i<str.size(); i++)
if(count[str[i]]==1)
return i;
return -1;
}
};