সমস্যা বিবরণ
একটি স্ট্রিং দেওয়া আছে। একই ক্যারেক্টার দুটির মাঝপথে সবচেয়ে লম্বা সাবস্ট্রিং এর লেন্থ বের করতে হবে।
ইনপুট: 'avbghvh'
আউটপুট: ৩ (কারণ 'v' দুটির মাঝপথে 'bgh' আছে)
সমাধান
const str = 'avbghvh';
const longestSub = (str = '') => {
const map = new Map();
let max = -1;
for (let i = 0; i < str.length; i++) {
if (map.has(str.charAt(i))) {
max = Math.max(max, i - map.get(str.charAt(i)) - 1);
} else {
map.set(str.charAt(i), i);
}
}
return max;
};
console.log(longestSub(str)); // 3
আউটপুট
3
ব্যাখ্যা
Mapদিয়ে প্রতিটি ক্যারেক্টারের ফার্স্ট অকারেন্স ইনডেক্স স্টোর করা হয়।- দ্বিতীয়বার পাওয়া গেলে দূরত্ব বের করা হয়:
currentIndex - firstIndex - 1। Math.maxদিয়ে সর্বোচ্চ আপডেট করা হয়।