
https://leetcode.cn/problems/first-unique-character-in-a-string/
java
/**
* 找到字符串中第一个只出现一次的字符的下标;若不存在返回 -1。
*
* 思路:
* 1) 用长度为 26 的计数数组统计每个小写字母出现次数;
* 2) 再从左到右扫描字符串,遇到出现次数为 1 的字符就返回其下标。
*
* 时间复杂度:O(n)(两次遍历字符串)
* 空间复杂度:O(1)(固定 26 大小数组)
*
* 说明:仅适用于全为小写字母 'a'~'z' 的字符串。
*/
class Solution {
public int firstUniqChar(String s) {
int[] a = new int[26]; // 统计每个小写字母出现次数(a[0] 对应 'a',a[25] 对应 'z')
// 第一次遍历:计数
for (int i = 0; i < s.length(); i++) {
char tmp = s.charAt(i);
a[tmp - 'a']++;
}
// 第二次遍历:找到第一个出现次数为 1 的字符
for (int i = 0; i < s.length(); i++) {
if (a[s.charAt(i) - 'a'] == 1) {
return i; // 返回下标
}
}
return -1; // 没有只出现一次的字符
}
}