समस्या
हमें एक JavaScript फ़ंक्शन लिखना है जो अक्षरों की स्ट्रिंग 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