JavaScript 无重复字符的最长子串 LeetCode-3

版权声明:本文为博主原创文章,未经博主允许不得转载https://blog.csdn.net/QQlaowang/article/details/82352698

题目:

给定一个字符串,找出不含有重复字符的最长子串的长度。

示例 1:
输入: "abcabcbb" 
输出: 3 
解释: 无重复字符的最长子串是 "abc",其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 无重复字符的最长子串是 "b",其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 无重复字符的最长子串是 "wke",其长度为 3。

请注意,答案必须是一个子串,"pwke" 是一个子序列 而不是子串

分析:2个for循环暴力解决

var lengthOfLongestSubstring = function(s) {
		    var length=1;
		    var arr=[];
	        if(!s)return 0//如果是空字符串就返回0
		    for(i=0;i<s.length;i++){
		        for(j=i+1;j<s.length;j++){
		        	if(arr.length==0)arr.push(s.charAt(i))//添加子串第一个字符
		            if(isRepeat(s,j,arr)){//判断子串有没有重复字符
		            	arr.push(s.charAt(j))
		            }
		            else{
		                if(arr.length>length){
		                	length=arr.length;
		                }
		                arr=[];
		                break//跳出for循环,优化算法
		            }
		        }
		    }
		    if(arr.length>length){
		               length=arr.length;
		    }//如果最长子串的最后一位是字符的最后一位,上面算法
		    //没有计算,现在加上这个情况

		    return length//返回最长子串长度
		    
            function isRepeat(s,j,arr){
		    	var l=s.charAt(j)
		    	for(var k=0;k<arr.length;k++){
		    		if(l==arr[k]){
		    			return false
		    		}
		    	}
		    	return true;
		   }
	};

猜你喜欢

转载自blog.csdn.net/QQlaowang/article/details/82352698