समस्या
हमें एक जावास्क्रिप्ट फ़ंक्शन लिखना है जो वर्णों की एक स्ट्रिंग लेता है, str, एकमात्र तर्क के रूप में। हमारे फ़ंक्शन को इनपुट स्ट्रिंग को एन्कोड करना चाहिए और इसके आकार की तुलना मूल स्ट्रिंग से करनी चाहिए और स्ट्रिंग को वापस करना चाहिए जो आकार में छोटा है।
किसी विशेष स्ट्रिंग को एन्कोड करने का नियम है -
-
n[s], जहां वर्ग कोष्ठक के अंदर s को ठीक k बार दोहराया जा रहा है।
उदाहरण के लिए, ddd को 3 [d] में एन्कोड किया जा सकता है, लेकिन 3 [d] की लंबाई 4 है जबकि ddd केवल 3 वर्ण लंबा है इसलिए हमारे फ़ंक्शन को अंततः ddd वापस करना चाहिए।
उदाहरण के लिए, यदि फ़ंक्शन का इनपुट है -
const str = 'aabcaabcd';
तब आउटपुट होना चाहिए -
const output = '2[aabc]d';
उदाहरण
इसके लिए कोड होगा -
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));
आउटपुट
और कंसोल में आउटपुट होगा -
2[aabc]d