问题:在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
解答:可以用HashMap统计每个字符对应的次数,然后再遍历这个map找出第一个。Java代码如下:
public int FirstNotRepeatingChar(String str) {
if (str == null || str.length() == 0) {
return -1;
}
int length = str.length();
HashMap<Character, Integer> map = new HashMap<>();
for (int i = 0 ; i < length; i++) {
char c = str.charAt(i);
if (map.containsKey(c)) {
map.put(c, map.get(c) + 1);
} else {
map.put(c, 1);
}
}
for (int i = 0; i < length; i++) {
char c = str.charAt(i);
if (map.get(c) == 1) {
return i;
}
}
return -1;
}
Python代码如下:
# -*- coding:utf-8 -*-
class Solution:
def FirstNotRepeatingChar(self, s):
d = {}
if len(s) == 0:
return -1
else:
# 遍历字符串,逐个统计每个字符出现的个数
for c in s:
if c in d:
d[c] = d[c] + 1
else:
d[c] = 1
# 将字符串s转成list,遍历list找到第一个出现1次的字符的位置
for index,e in enumerate(list(s)):
if d[e] == 1:
return index
return -1