সমস্যা
আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা একটি স্ট্রিং, str, একমাত্র যুক্তি হিসাবে নেয়৷
ফাংশনের ইনপুট স্ট্রিং এর উপর ভিত্তি করে একটি নতুন স্ট্রিং প্রস্তুত করা উচিত যেখানে প্রতিটি অক্ষরের একটিমাত্র উপস্থিতি রাখা হয় এবং অক্ষরটি রাখা হয় যা ফলাফলের স্ট্রিংটিকে অভিধানগতভাবে সবচেয়ে ছোট করে তোলে৷
উদাহরণস্বরূপ, যদি ফাংশনে ইনপুট হয় −
const str = 'cbacdcbc';
তারপর আউটপুট −
হওয়া উচিতconst output = 'acdb';
আউটপুট ব্যাখ্যা:
মনে রাখবেন যে আমরা স্ট্রিং থেকে 'c'-এর যেকোন উপস্থিতি মুছে ফেলতে পারতাম কিন্তু আমরা প্রথমেই সরিয়ে দিয়েছি, যা অভিধানগতভাবে স্ট্রিংটিকে 'a' এবং 'b'-এর ক্ষেত্রে সবচেয়ে ছোট এবং একই করে তোলে।
উদাহরণ
এর জন্য কোড হবে −
const str = 'cbacdcbc'; const removeDuplicates = (str = '') => { if (str.length <= 1) { return str; }; let flag; let string = ""; let legend = new Array(26).fill(-1 let last = "z"; let ind = 0; for (let i = str.length - 1; i > -1; i--) { const element = str[i]; if (legend[element.charCodeAt() - 97] < 0) { legend[element.charCodeAt() - 97] = i; last = element; ind = i; string += element; } else { if (last >= element) { last = element; ind = i; } } } let finalStr = last; while (string.length > finalStr.length) { legend.fill(-1); for (let i = str.length - 1; i > ind; i--) { const element = str[i]; if (finalStr.indexOf(element) < 0) { if (legend[element.charCodeAt() - 97] < 0) { legend[element.charCodeAt() - 97] = i; last = element; flag = i; } else { if (last >= element) { last = element; flag = i; } } } } ind = flag; finalStr += last; } return finalStr; }; console.log(removeDuplicates(str));
কোড ব্যাখ্যা:
এখানে ধারণা হল −
প্রথমবারের মতো, কোন অক্ষর ব্যবহার করা হয়েছে তা পরীক্ষা করার জন্য আমরা পুরো স্ট্রিংটি লুপ করি এবং সব অক্ষর ধারণ করে এমন ক্ষুদ্রতম প্রারম্ভিক অক্ষর সাবস্ট্রিং খুঁজে পাই।
এটি বোঝা সহজ হয় যদি আমরা লুপটি ডান থেকে বামে শুরু করি এবং সাবস্ট্রিং এর শুরুর অবস্থান এবং ন্যূনতম অক্ষরটি মুখস্ত রাখি।
তারপরে আমরা সাবস্ট্রিংটি লুপ করা শুরু করি (শুরুতে ন্যূনতম অক্ষর ছাড়া), এখনও ডান থেকে বামে, কিন্তু এই সময় আমাদের আগে থেকে সংরক্ষিত অক্ষরগুলিকে উপেক্ষা করতে হবে৷
আউটপুট
এবং কনসোলে আউটপুট হবে −
acdb