剑指offer最优解Java版-第一个只出现一次的字符
2019-06-30 本文已影响2人
全菜工程师小辉
题目描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
解决方法
将所有字符和对应的索引存到map中,再遍历map查找第一个出现一次的字符
public class Solution {
public int FirstNotRepeatingChar(String str) {
Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i < str.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 < str.length(); i++) {
if (map.get(str.charAt(i)) == 1) {
return i;
}
}
return -1;
}
}
复杂度分析:
- 时间复杂度:O(n)。
- 空间复杂度:O(n)。