समस्या विवरण
एक स्ट्रिंग str दी गई है जिसमें अंग्रेजी अल्फाबेट हैं। लक्ष्य str के सभी उपस्ट्रिंग्स में आने वाले स्वरों की संख्या ज्ञात करना है। यदि स्ट्रिंग "abcde" है तो उपस्ट्रिंग्स होंगे "a", "b", "c", "d", "e", "ab", "bc", "cd", "de", "abc", "bcd", "cde", "abcd", "bcde", "abcde"। इन उपस्ट्रिंग्स में स्वरों की गिनती 10 है। (a और e)
उदाहरण
इनपुट
str = "aloe"
आउटपुट
सभी उपस्ट्रिंग्स में स्वरों की संख्या: 14
व्याख्या
उपस्ट्रिंग्स हैं: "a", "l", "o", "e", "al", "lo", "oe", "alo", "loe", "aloe"। इनमें कुल स्वर: 14
इनपुट
str="http"
आउटपुट
सभी उपस्ट्रिंग्स में स्वरों की संख्या: 0
व्याख्या
उपस्ट्रिंग्स हैं: "h", "t", "t", "p", "ht", "tt", "tp", "htt", "ttp", "http"। इनमें कुल स्वर: 0
दृष्टिकोण
इस दृष्टिकोण में हम एक वेक्टर vec बनाएंगे, जो सभी उपस्ट्रिंग्स में iवें वर्ण की घटनाओं की गिनती vec[i] में संग्रहीत करता है।
0वां वर्ण n उपस्ट्रिंग्स में होता है जहां n स्ट्रिंग str की लंबाई है।
iवां वर्ण उन सभी उपस्ट्रिंग्स में होता है जिनमें यह शामिल है (n-i) + उन उपस्ट्रिंग्स की संख्या जिनमें iवां वर्ण और पिछला वर्ण दोनों शामिल हैं (arr[i-1]) - केवल पिछले वर्णों द्वारा बने उपस्ट्रिंग्स की संख्या (i)।
एल्गोरिदम चरण
- एक स्ट्रिंग
strइनपुट के रूप में लें। - फंक्शन
substring_vowels_count(string str, int length)strको उसकी लंबाई के साथ लेता है और दिए गए स्ट्रिंग के सभी उपस्ट्रिंग्स में आने वाले स्वरों की संख्या लौटाता है। - प्रारंभिक गिनती 0 लें।
- एक पूर्णांक वेक्टर
vecलें। forलूप का उपयोग करकेi=0सेi<lengthतकvecको पार करें और इसेstrके सभी उपस्ट्रिंग्स मेंiवें स्थान के वर्ण की घटनाओं की गिनती से भरें।- यदि
i=0, 0वें वर्ण के लिए यह गिनती लंबाई है।push_back[length]का उपयोग करकेvec[0]=lengthसेट करें। - अन्य सभी वर्णों के लिए
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में उपस्ट्रिंग्स में स्वरों की कुल घटनाओं की संख्या होगी। - परिणाम के रूप में गिनती लौटाएं।
C++ कोड उदाहरण
#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