最長文字列の検索


質問する



説明する



ええと.困難これは文字列の中で重複していない最長の文字列で、重複が発生した場合は、重複の前からずっと数えることができます.論理がおかしくて失敗した...

他人を解く



恩静解釈

賢い解釈.


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;
}