Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Mã hóa chuỗi để giảm kích thước trong JavaScript


Vấn đề

Cần viết hàm JS nhận chuỗi str, mã hóa và so sánh kích thước với gốc, trả về chuỗi ngắn hơn. Quy tắc mã hóa: n[s] nghĩa là s lặp lại k lần. Ví dụ: "ddd" -> "3[d]" nhưng "3[d]" dài 4 > 3 nên giữ "ddd".

Ví dụ:

const str = 'aabcaabcd';

Kết quả:

const output = '2[aabc]d';

Ví dụ

Mã thực hiện:

const str = 'aabcaabcd'; function encode(s) {    const { length } = s;    const dp = Array(length).fill([]);    dp.forEach((el, ind) => {       dp[ind] = Array(length).fill(null);    });    for(let l = 1; l <= length; l++){       for(let i = 0; i + l <= length; i++){          let j = i + l - 1;          dp[i][j] = s.substring(i, j + 1);          for (let k = i; k < j ; k ++) {             let acc = dp[i][k] + dp[k + 1][j];             if (acc.length < dp[i][j].length) {                dp[i][j] = acc;             }          }          let sub = s.substring(i, j + 1);          let double = sub + sub;          let cut = double.indexOf(sub, 1);          if (cut != -1 && cut < sub.length) {             let acc = sub.length / cut + "[" + dp[i][i + cut - 1] +"]";             if (acc.length < dp[i][j].length) {                dp[i][j] = acc;             }          }       }    }    let res = dp[0][dp.length - 1];    return res; } console.log(encode(str));

Kết quả

Kết quả in ra console:

2[aabc]d