题目描述
给定一个字符串 s
,请你找出其中不含有重复字符的 最长子串 的长度。
示例
输入:
s = "abcabcbb"
输出:
3
解释:
因为无重复字符的最长子串是 "abc",所以其长度为 3。
分析
遍历整个字符串,如果遍历过程中发现了有与之前相同的字符,则比较后续字符与之前是否相同,直到遇到与之前不同的字符。
代码
let lengthOfLongestSubstring = function (s) {
let minIndex = 0
let count = 0
for (let i = 0; i < s.length; i++) {
//indexOf方法返回的是元素第一次出现的索引
if (s.indexOf(s[i], minIndex) < i) {
// 如果遇到重复的字符,会进入判断
minIndex = s.indexOf(s[i], minIndex) + 1
// 令索引从下一位开始查找,判断接下来的字符串是否与之前一样
}
else {
// 获得最长字符串的长度
// 比如'ababc' , minIndex = 2 , i = 4 , count = 2
count = Math.max(count , i - minIndex + 1)
}
}
return count
}
console.log(lengthOfLongestSubstring('ababc'))
indexOf
indexOf()
方法返回调用它的 String 对象中第一次出现的指定值的索引,从fromIndex
处进行搜索。如果未找到该值,则返回 -1。
语法:
str.indexOf(searchValue [, fromIndex])参数
1. searchValue
要被查找的字符串值。如果没有提供确切地提供字符串,searchValue 会被强制设置为 "undefined", 然后在当前字符串中查找这个值。
2. fromIndex
(可选)数字表示开始查找的位置。可以是任意整数,默认值为
0
。如果fromIndex
的值小于0
,或者大于str.length
,那么查找分别从0
和str.length
开始。返回值
查找的字符串
searchValue
的第一次出现的索引,如果没有找到,则返回-1
。若被查找的字符串
searchValue
是一个空字符串,将会产生“奇怪”的结果。如果fromIndex
值为空,或者fromIndex
值小于被查找的字符串的长度,返回值和以下的fromIndex
值一样:'hello world'.indexOf('') // 返回 0 'hello world'.indexOf('', 0) // 返回 0 'hello world'.indexOf('', 3) // 返回 3 'hello world'.indexOf('', 8) // 返回 8