题目:
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
思路
创建一个HashMap,遍历整个字符串,并记录它出现的次数。再for循环遍历一遍hashmap,第一个其键值对中的值为一的就是所要求的。
Java
package nowcoder;
import java.util.HashMap;
public class S34_FirstNotRepeatingChar {
public int firstNotRepeatingChar(String str){
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
for (int i=0;i<str.length();i++){
if (map.containsKey(str.charAt(i))){
int count = map.get(str.charAt(i));
map.put(str.charAt(i), count+1);
}
else map.put(str.charAt(i), 1);
}
for (int i=0;i<str.length();i++){
if (map.get(str.charAt(i)) == 1)
return i;
}
return -1;
}
public static void main(String[] args){
S34_FirstNotRepeatingChar s34 = new S34_FirstNotRepeatingChar();
String str = "skdlfjksljflbjalkfhisahdfjlak";
System.out.println(s34.firstNotRepeatingChar(str));
}
}
Python
class FirstNotRepeatingChar:
def firstNotRepeatingChar(self, str):
dict = {}
for i in str:
if i not in dict:
dict[i] = 1
else: dict[i] += 1
for key in dict:
if dict[key] == 1:
return str.index(key)
return -1
if __name__ == '__main__':
test = FirstNotRepeatingChar()
str = "google"
print(test.firstNotRepeatingChar(str))