如何理解判断字符串唯一字符的if条件代码逻辑?
拆解这段唯一字符检查代码的逻辑
先明确这段代码的作用:找到字符串中第一个只出现一次的字符的索引,如果所有字符都重复,返回-1。
核心判断语句拆解
我们把s.indexOf(s.charAt(i), s.indexOf(s.charAt(i)) + 1) == -1拆成关键部分一步步看:
s.charAt(i)
拿到字符串第i位的字符。比如循环到i=0时,s="leetcode",这里拿到的是字符'l'。s.indexOf(s.charAt(i))
调用indexOf的基础方法,返回当前字符第一次在字符串中出现的索引。比如'l'第一次出现的位置是0。s.indexOf(字符, 起始位置)
这是indexOf的重载方法,第二个参数指定从哪个索引开始往后搜索。这里传入的起始位置是「第一次出现的索引 + 1」,意思是:从当前字符第一次出现位置的下一位开始,找这个字符有没有再次出现。判断结果是否为-1
indexOf找不到目标字符时会返回-1。所以这个判断的意思是:当前字符在第一次出现的位置之后,再也没有重复出现过——也就是这个字符在整个字符串里只出现了一次。
结合例子走一遍流程
拿s="leetcode"举例:
- 循环到
i=0,字符是'l' s.indexOf('l')返回0,起始搜索位置变成0+1=1- 从索引1开始找
'l',整个字符串后面没有'l',所以indexOf返回-1 - 满足判断条件,直接返回i=0,这就是第一个唯一字符的索引
代码整体逻辑
循环遍历字符串的每个字符,对每个字符执行上述检查:
- 一旦找到第一个「只出现一次」的字符,立刻返回它的索引
- 如果循环完所有字符都没找到符合条件的,返回-1
内容的提问来源于stack exchange,提问作者Bek150
相关产品推荐
相关产品推荐

