LeetCode 387. First Unique Character in a String
按照题意,我们考虑一种直观的解法。
设置一个大小为26的
int数组charCount,用来记录每个字符出现的次数。第一次遍历字符串,对于每一个字符
c,将charCount[c - 'a']自增1。第二次遍历字符串,对于每一个下标
i,如果该位置的字符对应的计数值为1,我们知道在整个字符串中这个字符只出现了一次,范围这个下标i即可。
对应代码如下。
1 | public int firstUniqChar(String s) { |
上面的方法,遍历两边输入的字符串,时间复杂度是O(n)。考虑字符串很长但是字典很小的情况,我们可以做到只遍历一次字符串,然后遍历一次count数组,其中count数组的大小正比于字典长度。虽然这种方法的渐进时间复杂度也是O(n),但是在字符串很长的情况下性能更好。
具体方法如下。
设置一个大小为26*2的
int[][]数组charCount。其中int[i][0]表示对应int值为i的字符首次出现的位置,int[i][1]表示值为i的字符在字符串中出现的次数。遍历字符串,填充
charCount。遍历
charCount,找到并返回出现次数为1的字符首次出现的位置。
代码如下。
1 | public int firstUniqChar(String s) { |