题目:无重复字符的最长字串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例:
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其
长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b"
,所以其长度为 1。
示例 3:
输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是"wke"
,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke"
是一个子序列,不是子串。
使用语言JavaScript:
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function(s) {
var now=[];
var max = 0;
for(var i = 0;i<s.length;i++){
var n = s.substring(i, i + 1);
if(now.includes(s[i])){
if(now.length > max){
max = now.length;
}
now += n;
var index = now.indexOf(n);
now = now.substring(index + 1);
}else{
now += n;
}
}
return now.length > max ? now.length : max;
};
分析:
本题我一开始走进了思维盲区,做了好久结果没有通过,后来参考别人的Java方法才通过的。我一开始是遍历s字符串,将字符串中每个字符逐步加入一个数组中,一旦出现重复的字符,就将当前数组的长度保存,然后清空数组重新存入字符。但有一个例子我没考虑,就是kvkl。这个例子按我的思路应该是2,但其实结果是3
错误例子:
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function(s) {
var max = [];
var num = [];
var j = 0;
if(s.length==0){
return 0;
}
for(var i=0;i<s.length;i++){
if(max.includes(s[i])){
num[j] = max.length;
max = [];
max.push(s[i]);
j++;
}else{
max.push(s[i]);
}
}
if(num.length>=max.length){
return Math.max.apply(null,num);
}else{
return max.length;
}
};