এই টিউটোরিয়ালে, আমরা একটি প্রোগ্রাম লিখতে যাচ্ছি যা একটি স্ট্রিং এর সমস্ত অবস্থানে পৌঁছানোর জন্য একটি সংকেতের জন্য নেওয়া সময় গণনা করে। আমাকে একটি উদাহরণ দিয়ে ব্যাখ্যা করতে দিন।
আমাদের একটি স্ট্রিং থাকবে যেখানে শুধুমাত্র s থাকবে এবং p চরিত্র. s একটি সংকেত এবং p একটি অবস্থান স্ট্রিং মধ্যে একটি সংকেত s এ শুরু হয়৷ এবং বাম এবং ডান উভয় দিকেই ভ্রমণ করে। আমরা ধরে নিচ্ছি স্ট্রিংয়ের পরবর্তী অবস্থানে যেতে এক ইউনিট সময় লাগে। আমাদের কাজ হল সমস্ত অবস্থান রূপান্তর করার জন্য প্রয়োজনীয় সময় গণনা করা সংকেত-এ .
আসুন কিছু উদাহরণ দেখি।
ইনপুট − pppppspss
আউটপুট − 5
ইনপুট − pspspsps
আউটপুট − 1
ইনপুট − ssssss
আউটপুট − 0
আসুন সমস্যা সমাধানে জড়িত পদক্ষেপগুলি দেখি৷
৷-
একটি স্ট্রিং এবং একটি সময় শুরু করুন (0)
-
স্ট্রিং এর উপর পুনরাবৃত্তি করুন।
-
ক্রমাগত p গণনা করুন অক্ষর এবং একটি পরিবর্তনশীল মধ্যে গণনা সংরক্ষণ করুন.
-
যদি বর্তমান অক্ষরটি s হয় এবং p গণনা আগের সময়ের চেয়ে বেশি তারপর s কিনা তা পরীক্ষা করুন বাম পাশে উপস্থিত আছে বা নেই৷
-
যদি s উভয় দিকে উপস্থিত, তারপর গণনাটিকে দুটি ভাগে ভাগ করুন s উভয় দিকে ভ্রমণ করতে পারেন।
-
p এর গণনা পুনরায় সেট করুন .
-
উদাহরণ
আসুন কোডটি দেখি।
#include <bits/stdc++.h> using namespace std; int timeToConvertToSignalString(string sample_string, int string_len) { int p_count = 0, time = 0; for (int i = 0; i <= string_len; i++) { if (sample_string[i] == 'p') { p_count++; } else { if (p_count > time) { bool is_present_left_side = false; if (((i - p_count) > 0) && (sample_string[i - p_count - 1] == 's')) { is_present_left_side = 1; } if (is_present_left_side) { p_count = ceil((double)p_count / 2); } time = max(time, p_count); } p_count = 0; } } return time; } int main() { string sample_string = "pppppspss"; int n = sample_string.size(); cout << timeToConvertToSignalString(sample_string, n) << endl; return 0; }
আউটপুট
আপনি যদি উপরের প্রোগ্রামটি চালান, তাহলে আপনি নিম্নলিখিত ফলাফল পাবেন।
5
একটি ভিন্ন কেস সহ প্রোগ্রামটি চালানোর চেষ্টা করুন এবং এটি পরীক্ষা করুন৷
উপসংহার
টিউটোরিয়ালে আপনার কোন প্রশ্ন থাকলে মন্তব্য বিভাগে উল্লেখ করুন।