zl程序教程

您现在的位置是:首页 >  后端

当前栏目

力扣——无重复字符的最长子串

字符 重复 最长 力扣 子串
2023-06-13 09:18:28 时间

题目描述

给定一个字符串 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