Leetcode题中.indexOf判断语句的逻辑解析请求
代码行
if (str.indexOf(c) == i && str.indexOf(c, i + 1) == -1)解析 这行代码是判断当前遍历字符是否为字符串首个非重复字符的核心逻辑,拆成两个条件逐一理解:
str.indexOf(c) == i:
这里的c是循环到的第i位字符,str.indexOf(c)会返回c在字符串中第一次出现的索引。如果该索引等于当前的i,说明c在i位置之前的字符串里从未出现过——当前位置就是c第一次出现的地方。str.indexOf(c, i + 1) == -1:indexOf的第二个参数是搜索起始位置,这里从i+1开始查找c。如果返回-1,说明i位置之后的所有字符里,再也找不到c了。
两个条件结合起来,就表示当前字符c在整个字符串里只出现过一次。因为我们是从左到右遍历字符串,第一个满足该条件的字符,就是题目要求的「首个非重复字符」。
拿题目示例输入"agettkgaeee"来说,遍历到字符k时i=5:
str.indexOf('k')返回5,等于当前i,说明k之前没出现过;- 从
i+1=6的位置开始找k,结果返回-1,说明k之后也没出现过;
因此k满足条件,被作为结果返回。
内容的提问来源于stack exchange,提问作者Smeliott
相关产品推荐
相关产品推荐

