持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情
一、题目描述:
387. 字符串中的第一个唯一字符 - 力扣(LeetCode)
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。
示例 1:
输入: s = "leetcode"
输出: 0
示例 2:
输入: s = "loveleetcode"
输出: 2
示例 3:
输入: s = "aabb"
输出: -1
提示:
- 1 <= s.length <= 10^5
- s 只包含小写字母
二、思路分析:
题干要求找到第一个不重复的字符,那么自然是从前向后遍历
先使用charAt得到数组下标为i的字符,然后使用indexOf从i+1向后找这个字符
若没有返回-1,则表示找到了 因此直接结束这轮循环 i++
如果返回的是-1,则表示该坐标以后没有与之相同的字符,此时需要判断其之前有没有与之相等的字符
因此indexOf(ch,0)==i 就是防止诸如"aabb"这种情况 第二个a之后没有与之相等的字符,此时需要判断从头找的第一个a数组下标是不是也是1
若是 则a在整个字符串中只出现了一次。
整个for走完 没有找到则返回-1.
三、AC 代码:
class Solution {
public int firstUniqChar(String s) {
for (int i = 0; i < s.length(); i++) {
char ch=s.charAt(i);
if(s.indexOf(ch,i+1)!=-1) {
continue;
}
if(s.indexOf(ch,0)==i)
return i;
}
return -1;
}
}
范文参考:
字符型和整型的转换,11行代码速度超越99% - 字符串中的第一个唯一字符 - 力扣(LeetCode)
维护一个出现次数为1的hashmap, 遍历string, 找到第一个char - 字符串中的第一个唯一字符 - 力扣(LeetCode)