একঘেয়ে স্ট্রিং বৃদ্ধি:
'0' এবং '1'-এর একটি স্ট্রিং একঘেয়েভাবে বৃদ্ধি পাচ্ছে যদি এতে '0' (সম্ভবত 0) এর কিছু সংখ্যা থাকে, তারপরে '1'-এর কিছু সংখ্যা (সম্ভবত 0।)
সমস্যা
আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা একটি বাইনারি স্ট্রিং, str, প্রথম এবং একমাত্র যুক্তি হিসাবে নেয়৷
আমরা স্ট্রিং-এ উপস্থিত যেকোনো '0' থেকে '1' বা যেকোনো '1' থেকে '0' ফ্লিপ করতে পারি। S একঘেয়েভাবে বাড়ানোর জন্য আমাদের ফাংশনটি ন্যূনতম সংখ্যক ফ্লিপ ফেরত দেবে।
উদাহরণস্বরূপ, যদি ফাংশনে ইনপুট হয়
ইনপুট
const str = '00110';
আউটপুট
const output = 1;
আউটপুট ব্যাখ্যা
কারণ আমরা যদি শেষ '0' থেকে '1' ফ্লিপ করি, তাহলে আমাদের কাছে '00111' স্ট্রিং বাকি থাকবে।
উদাহরণ
const str = '00110';
const countFlips = (str = '') => {
const map = {}
const helper = (index, prev) => {
map[index] = map[index] || {}
if (map[index][prev] !== undefined) {
return map[index][prev]
}
if (index >= str.length) {
return 0
}
if (prev === '0') {
if (str[index] === '0') {
map[index][prev] = Math.min(helper(index + 1, '0'), helper(index + 1, '1') + 1)
} else {
map[index][prev] = Math.min(helper(index + 1, '1'), helper(index + 1, '0') + 1)
}
} else if (str[index] === '0') {
map[index][prev] = helper(index + 1, '1') + 1
} else {
map[index][prev] = helper(index + 1, '1')
}
return map[index][prev]
}
return helper(0, '0')
};
console.log(countFlips(str)); আউটপুট
1