给定一个字符串 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()
方法返回调用它的 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