387. 字符串中的第一个唯一字符

题目

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。

示例1:

1
2
3
4
5
s = "leetcode"
返回 0.

s = "loveleetcode",
返回 2.

示例2:

1
2
输入: s = "loveleetcode"
输出: 2

示例3:

1
2
输入: s = "aabb"
输出: -1

提示:

  • 1 <= s.length <= 105
  • s 只包含小写字母

解法

解法一:

采用数组或者哈希表判断第一个唯一字符。

第一次遍历,用数组或者哈希表保存每个字符出现的次数;

第二次遍历,判断数组中每个字符的次数是否为1,1的话就是第一个出现的唯一字符,否则,继续遍历。

Java-数组

1
2
3
4
5
6
7
8
9
10
11
12
13
public int firstUniqChar(String s) {
int[] chars = new int[26];
for (int i = 0;i < s.length();i++) {
chars[(s.charAt(i) - 'a')]++;
}

for (int i = 0; i < s.length();i++) {
if (chars[s.charAt(i) - 'a'] == 1) {
return i;
}
}
return -1;
}

Java-哈希表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int reverse(int x) {
int res = 0;

while (x != 0) {
int pop = x % 10;
if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && pop > 7)) {
return 0;
}
if (res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && pop < -8)) {
return 0;
}

res = res * 10 + pop;
x /= 10;
}

return res;
}
0%