# 题目描述
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例一🌰
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
@前端进阶之旅: 代码已经复制到剪贴板
示例二🌰
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
@前端进阶之旅: 代码已经复制到剪贴板
示例三🌰
输入: "dvdf"
输出: 3
解释: 因为无重复字符的最长子串是 "vdf",所以其长度为 3。
@前端进阶之旅: 代码已经复制到剪贴板
# 解题思路
- 需要考虑到每一个字符串的所有组合形式,且每个组合形式中不能有相同的字符串;
- 可以定义一个变量
leftIndex来记录每一次重复的位置 - 利用
for循环遍历数组
# coding
# 解法一
将字符串转换为数组,然后查找:
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function(s) {
if (typeof s !== 'string' || s.length <= 0) return 0;
let charts = s.split('') // 字符串转数组
let maxLength = 0
let leftIndex = 0 // 记录每一次重复的位置
for (let start = 0; start < charts.length; start++) {
for (let i = leftIndex; i < start; i++) {
if (charts[i] == charts[start]) { // 若是有相同的字符串
maxLength = Math.max(maxLength, start - leftIndex)
leftIndex = i + 1 // 更新重复位置的下标
break // 跳出本次循环
}
}
}
return Math.max(maxLength, charts.length - leftIndex)
};
