var str = 'abcabcbb'; getLongStr(str); // getLongStr('aa'); function getLongStr(str) { if(!str) { return '字符串爲空'; } if(str.length === 1) { return 1; } var arr = str.split(''); var obj = {}; var strArr = []; var nStr = '' var j = 0; // 取出來全部不含重複字符的字符串 for(var i = 0, len = arr.length; i < len; i++) { var val = arr[i]; if(obj[val]) { i = j; j++; obj = {}; strArr.push(nStr); nStr = ''; } else { obj[val] = true; nStr += val; } } // 取出來最長的字符串 var longIndex = strArr[0].length; for (var i = 1, len = strArr.length; i < len; i++) { var nLen = strArr[i].length; var nVal = strArr[i]; if (nLen > longIndex) { longIndex = nLen; } } return longIndex; }
問題:給定一個字符串,請你找出其中不含有重複字符的最長子串?
答案以下:code
// getLongStr('abcabcbb'); // getLongStr('aa'); function getLongStr(str) { str += ''; if(!str) { return '字符串爲空' } if(str.length === 1) { return str; } var arr = str.split(''); var obj = {}; var strArr = []; var nStr = '' var j = 0; // 取出來全部不含重複字符的字符串 for(var i = 0, len = arr.length; i < len; i++) { var val = arr[i]; if(obj[val]) { i = j; j++; obj = {}; strArr.push(nStr); nStr = ''; } else { obj[val] = true; nStr += val; } } // 取出來最長的字符串 var longIndex = strArr[0].length; var longArr = [strArr[0]] for (var i = 1, len = strArr.length; i < len; i++) { var nLen = strArr[i].length; var nVal = strArr[i]; if (nLen > longIndex) { longIndex = nLen; longArr = [nVal]; } if (nLen === longIndex) { longArr.push(nVal) } } return [...new Set(longArr)].join(); }