यहां हम एक और समस्या देखेंगे, जहां एक स्ट्रिंग और दूसरा पूर्णांक मान k दिया गया है। हमें लंबाई k के सबस्ट्रिंग की संख्या ज्ञात करनी है, जिसके ASCII मानों का योग k से विभाज्य है।
मान लीजिए कि एक स्ट्रिंग "बीसीजीएबीसी" है। और k का मान 3 है। यहाँ स्ट्रिंग BCG का ASCII योग 300 है, ABC का ASCII योग 294 है, दोनों k =3 से विभाज्य हैं।
दृष्टिकोण सरल है। सबसे पहले हमें पहले सबस्ट्रिंग के वर्णों का ASCII मान ज्ञात करना होगा, जिसकी लंबाई k है। हमें स्लाइडिंग विंडो तकनीक का उपयोग करना होगा और विंडो के पहले अक्षर के ASCII को घटाना होगा, और अगले वर्ण के ASCII को जोड़ना होगा जो विंडो को खिसकाने के बाद आ रहा है, हम प्रत्येक चरण में गिनती बढ़ाएंगे, जब योग k से विभाज्य होगा। ।
उदाहरण
#include <iostream>
using namespace std;
int countKLenSubstr(string str, int k) {
int len = str.length();
int sum = 0;
int count = 0 ;
for (int i = 0; i <len; i++)
sum += str[i] ; //ASCII sum of first substring
if (sum % k == 0)
count++;
for (int i = k; i < len; i++) {
int prev_ascii = str[i-k]; //ASCII of the first character of the window
sum -= prev_ascii;
sum += str[i];
if (sum % k == 0)
count += 1;
}
return count ;
}
int main() {
string s = "BCGABC" ;
int k = 3 ;
cout<<"Number of substrings: " << countKLenSubstr(s, k);
} आउटपुट
Number of substrings: 2