题目描述
- 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)
解题思路
- 采用一个LinkedHashMap实现,这个表示有序存储,存储的键为每个出现的字符,值为一个list集合,集合中代表出现了这个键对应的下标索引
- 采用这种方式在后续中只需要找到字符对应的值中的size第一个为1的那么就是对应的结果,然后从集合中取出该值返回即可。
源代码实现
import java.util.*;
public class Solution {
private static Map<Character, List<Integer>> map;
{
map = new LinkedHashMap<>();
}
public int FirstNotRepeatingChar(String str) {
if (str==null || str.length()==0) return -1;
for (int i=0; i<str.length(); i++) {
char ch = str.charAt(i);
if (map.containsKey(ch)) {
List<Integer> temp = map.get(ch);
temp.add(i);
map.put(ch, temp);
} else {
List<Integer> temp = new ArrayList<>();
temp.add(i);
map.put(ch, temp);
}
}
for (Map.Entry<Character, List<Integer>> entry : map.entrySet()) {
if (entry.getValue().size()==1) return entry.getValue().get(0);
}
return -1;
}
}
网友评论