সমস্যা
আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা অক্ষরের একটি স্ট্রিং, 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