开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第33天,点击查看活动详情
题目描述
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
来源:力扣(LeetCode)
- 示例 1
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
- 示例 2
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
- 示例 2
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
提示:
0 <= s.length <= 5 * 104s由英文字母、数字、符号和空格组成
思路分析
根据题意可知,题目给出一个字符串,里面的字符由英文字母、数字、符号和空格组成,需要我们找出字符串strs中不含重复字符的子字符串,并且要字符最多的、长度最长的子字符串。
要找出长度最长的,那么就需要用到Math.max()方法比较出较大的数值。声明一个变量max存最大值,一个newArray存符合规则的子字符。循环字符串strs,在每次循环中判断每个元素是否在newArray中,若是没有就直接push到newArray中,若是有就要找出在数组中的位置index,然后将数组newArray中的index之前所有元素全部删除,index后面的元素就都留着,再将当前元素strs[i] push到数组newArray里面,每次都需要将前一次的max和当前的newArray的长度作比较,取最大值赋予max;直到循环结束,max就是最长子字符串的长度。
AC代码
function solution(strs) {
let max = 0;
let newArray = [];
for(let i=0; i<strs.length; i++) {
if(newArray.includes(strs[i])) {
let index = newArray.indexOf(strs[i]);
newArray.splice(0, index + 1);
newArray.push(strs[i]);
}else{
newArray.push(strs[i]);
}
max = Math.max(max, newArray.length);
}
console.log(max);
return max;
}
let strs = "abcabcbb";
solution(strs)