链接
牛客:第一个只出现一次的字符
LeetCode:剑指 Offer 50. 第一个只出现一次的字符
思路
很容易想到利用哈希表遍历计数,时间复杂度O(n),空间复杂度O(n)。
因为时间复杂度基本无法提升了,我们想想看如何改进空间复杂度,
代码
牛客:
import java.util.*;
public class Solution {
public int FirstNotRepeatingChar(String str) {
Map<Character, Integer> map = new HashMap<>();
char[] arr = str.toCharArray();
for (int i = 0; i < arr.length; i++) {
if (map.containsKey(arr[i])) {
int value = map.get(arr[i]);
map.put(arr[i], ++value);
} else {
map.put(arr[i], 1);
}
}
int pos = -1;
for (int i = 0; i < arr.length; i++) {
char c = arr[i];
if (map.get(c) == 1) {
return i;
}
}
return pos;
}
}
LeetCode:
class Solution {
public char firstUniqChar(String s) {
Map<Character, Integer> map = new HashMap<>();
char[] arr = s.toCharArray();
for (int i = 0; i < arr.length; i++) {
if (map.containsKey(arr[i])) {
int value = map.get(arr[i]);
map.put(arr[i], ++value);
} else {
map.put(arr[i], 1);
}
}
for (int i = 0; i < arr.length; i++) {
char c = arr[i];
if (map.get(c) == 1) {
return c;
}
}
return ' ';
}
}
牛客和LeetCode返回值略有区别