একটি স্ট্রিং str দেওয়া আছে যাতে ইংরেজি অক্ষর আছে। লক্ষ্য হলো str-এর সকল সাবস্ট্রিংয়ে মোট কতটি স্বরবর্ণ (vowel) আছে সেটি বের করা। যদি স্ট্রিংটি "abcde" হয়, তবে সাবস্ট্রিংগুলো হবে: "a", "b", "c", "d", "e", "ab", "bc", "cd", "de", "abc", "bcd", "cde", "abcd", "bcde", "abcde"। এই সাবস্ট্রিংগুলিতে স্বরবর্ণের মোট সংখ্যা ১০ (a এবং e)।
উদাহরণ ১
ইনপুট
str = "aloe"
আউটপুট
স্ট্রিংয়ের সকল সাবস্ট্রিংয়ে স্বরবর্ণের সংখ্যা: 14
ব্যাখ্যা
সাবস্ট্রিংগুলো: "a", "l", "o", "e", "al", "lo", "oe", "alo", "loe", "aloe"। এগুলোর মোট স্বরবর্ণ: ১৪
উদাহরণ ২
ইনপুট
str="http"
আউটপুট
স্ট্রিংয়ের সকল সাবস্ট্রিংয়ে স্বরবর্ণের সংখ্যা: 0
ব্যাখ্যা
সাবস্ট্রিংগুলো: "h", "t", "t", "p", "ht", "tt", "tp", "htt", "ttp", "http"। এগুলোর মোট স্বরবর্ণ: ০
প্রয়োগ করা পদ্ধতি
এই পদ্ধতিতে একটি ভেক্টর vec তৈরি করা হয় যেটি vec[i]-এ i-তম ক্যারেক্টারের সকল সাবস্ট্রিংয়ে থাকার সংখ্যা রাখে।
০তম ক্যারেক্টার n টি সাবস্ট্রিংয়ে থাকে যেখানে n হলো স্ট্রিং str-এর দৈর্ঘ্য।
i-তম ক্যারেক্টার সকল সাবস্ট্রিংয়ে থাকে যাতে সেটি থাকে (n-i) + যেসব সাবস্ট্রিংয়ে i-তম ক্যারেক্টারসহ আগের ক্যারেক্টারও থাকে (arr[i-1]) - যেসব সাবস্ট্রিং শুধু আগের ক্যারেক্টারগুলো দিয়ে তৈরি (i)।
ইনপুট হিসেবে স্ট্রিং
strনিন।substring_vowels_count(string str, int length)ফাংশনটি স্বরবর্ণের মোট সংখ্যা রিটার্ন করে।আরম্ভিক কাউন্ট ০ রাখুন।
ইন্টিজার ভেক্টর
vecনিন।forলুপ দিয়েi=0থেকেiপর্যন্ত vecপূরণ করুন প্রতিটি পজিশনের ক্যারেক্টারের সাবস্ট্রিংয়ে থাকার কাউন্ট দিয়ে।যদি
i=0, ০তম ক্যারেক্টারের জন্য কাউন্ট হলোlength।vec[0]=lengthpush_backদিয়ে সেট করুন।বাকি ক্যারেক্টারগুলো için
push_back(temp_1 + temp_2)ব্যবহার করুন যেখানেtemp_1=length-iএবংtemp_2=vec[i-1]-i।এখন আবার
forলুপ দিয়েstrট্রুভার্স করুন এবং প্রতিটিstr[i]স্বরবর্ণ হলে (a, e, i, o, u),vec[i]কাউন্টে যোগ করুন।শেষে সাবস্ট্রিংয়ে স্বরবর্ণের মোট সংখ্যা
count-এ থাকবে।countরিটার্ন করুন ফলাফল হিসেবে।
উদাহরণ কোড
#include <bits/stdc++.h>
using namespace std;
int substring_vowels_count(string str, int length) {
int count = 0;
vector<int> vec;
for (int i = 0; i < length; i++) {
if (i == 0) {
vec.push_back(length);
} else {
int temp_1 = length - i;
int temp_2 = vec[i - 1] - i;
vec.push_back(temp_1 + temp_2);
}
}
for (int i = 0; i < length; i++) {
if(str[i] == 'a' || str[i] == 'i' || str[i] == 'e' || str[i] == 'o' || str[i] == 'u') {
count = count + vec[i];
}
}
return count;
}
int main() {
string str = "honesty";
int length = str.length();
cout << "স্ট্রিংয়ের সকল সাবস্ট্রিংয়ে স্বরবর্ণের সংখ্যা: " << substring_vowels_count(str, length);
return 0;
}
আউটপুট
উপরোক্ত কোডটি রান করলে নিচের আউটপুটটি আসবে:
স্ট্রিংয়ের সকল সাবস্ট্রিংয়ে স্বরবর্ণের সংখ্যা: 28