javascript初探LeetCodeの3.Longest Substring Without Repeat Chracters
2019 ワード
テーマ
Gven a string、find the length of the longest substring without repeating characters.
example
Given
分析
これはleetcodeの上の第3題で、難易度はmediumで、1文字列の連続するサブストリングの長さを求めて、このサブストリングの中で重複する文字が存在しません.最初に文字列を行列に変えて、サブストリングを仮配列で保存するという考えです.配列を巡回している間、現在の要素が一時的な配列中にすでに存在している場合、このときのサブストリングの最大長さを記録し、既存の要素および前の要素を配列から移動し、最後に現在の要素
js実現
討論区のある大神さんはcで書いたコードの実行時間は4 msしかないですが、上のjsコードの実行時間は185 msです.彼は針で串刺しの開始と終了を記録して、上のコードを改善します.
Gven a string、find the length of the longest substring without repeating characters.
example
Given
"abcabcbb"
、the answer is "abc"
、which the length is 3.Given "bbbbb"
、the answer is "b"
、with the length of 1.Given "pwwkew"
、the answer is "wke"
、with the length of 3.Note the strember分析
これはleetcodeの上の第3題で、難易度はmediumで、1文字列の連続するサブストリングの長さを求めて、このサブストリングの中で重複する文字が存在しません.最初に文字列を行列に変えて、サブストリングを仮配列で保存するという考えです.配列を巡回している間、現在の要素が一時的な配列中にすでに存在している場合、このときのサブストリングの最大長さを記録し、既存の要素および前の要素を配列から移動し、最後に現在の要素
"pwke"
を一時的な配列中に移動させ、巡回が完了するまで.js実現
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function(s) {
var arr = s.split('');
var longest = 0;
var temp = [];
arr.forEach(function(value){
let index_of = temp.indexOf(value);
if(index_of!=-1){//
longest = temp.length > longest ? temp.length : longest;
for(let i = 0;i <= index_of;i++){
temp.shift();
}
}
temp.push(value);
});
return temp.length > longest ? temp.length : longest;
};
締め括りをつける討論区のある大神さんはcで書いたコードの実行時間は4 msしかないですが、上のjsコードの実行時間は185 msです.彼は針で串刺しの開始と終了を記録して、上のコードを改善します.
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function(s) {
var arr = s.split('');
var longest = 0;
var start = 0,end = -1;
arr.forEach(function(value){
let index_of = arr.indexOf(value,start);//
if(index_of >= start && index_of <= end){//
longest = end -start +1 > longest ? end -start +1 : longest;
start = index_of + 1;
}
end++;
});
return end -start +1 > longest ? end -start +1 : longest;
};
運行時間は182 msですが、最適化がはっきりしていないようです.興味があるなら、もう一度最適化してみてください.