最長文字列の検索
1748 ワード
質問する
説明する
ええと.困難これは文字列の中で重複していない最長の文字列で、重複が発生した場合は、重複の前からずっと数えることができます.論理がおかしくて失敗した...
他人を解く
恩静解釈
賢い解釈.
const isValid = (size, str) => { //중복아닌게 하나라도있으면 true
let s = 0,
e = size - 1;
let mymap = new Map();
for (let i = 0; i <= e; i++) {
if (mymap.has(str[i])) {
let cnt = mymap.get(str[i]);
mymap.delete(str[i]);
mymap.set(str[i], cnt + 1);
} else mymap.set(str[i], 1);
}
if (mymap.size === size) return true;
while (e < str.length - 1) {
e++;
let cnt = mymap.get(str[s]);
if (cnt === 1) mymap.delete(str[s]);
else {
mymap.delete(str[s]);
mymap.set(str[s], cnt - 1);
}
s++;
if (mymap.has(str[e])) {
let tmpcnt = mymap.get(str[e]);
mymap.delete(str[e]);
mymap.set(str[e], tmpcnt + 1);
} else mymap.set(str[e], 1);
if (mymap.size === size) return true;
}
return false;
}
const getLengthOfStr = str => {
let s = 0,
e = str.length,
mid, answer = 0;
while (s <= e) {
mid = Math.floor((s + e) / 2);
if (isValid(mid, str)) {
s = mid + 1;
answer = (answer < mid) ? mid : answer;
} else e = mid - 1;
}
return answer;
}
Reference
この問題について(最長文字列の検索), 我々は、より多くの情報をここで見つけました https://velog.io/@dongha1992/알고리즘-가장-긴-문자열-찾기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol