圧縮プログラム(level 2)


私の解答(解答時間:52分)

function solution(msg) {
    var answer = [];
    let dict = new Map();
    for (let i = 65; i <= 90; i++) {
        dict.set(String.fromCharCode(i), i-64);
    }
    let arrM = msg.split("");
    let count = 1;
    for (let i = 0; i < arrM.length-1; i+=count) {
        for (let j = 1; j <= arrM.length; j++) {
            count = j;
            if (!dict.has(arrM.slice(i,i+j+1).join(""))) {
                dict.set(arrM.slice(i,i+j+1).join(""), dict.size+1);
                answer.push(dict.get(arrM.slice(i,i+j).join("")));
                break;
            } else {
                if (i+j === arrM.length-1) {
                    answer.push(dict.get(arrM.slice(i,i+j+1).join("")));
                    return answer;
                }
            }
        }
    }      
    answer.push(dict.get(arrM[arrM.length-1]));
    return answer;
}
最初は,arm長をwhile文で0とループし,配列長を減らすように行ったが,タイムアウトが続いた.接合配列を判断するのに長い時間がかかり,for文で代用しcountという変数を設計し,処理後の文字をスキップできるようにした.