समस्या विवरण
हमें एक स्ट्रिंग str दी गई है। लक्ष्य उन शब्दों की गणना करना है जिनकी लंबाई str के बराबर हो और जिनमें प्रत्येक स्थिति i पर का अक्षर मूल स्ट्रिंग के (i-1)-वें, i-वें, या (i+1)-वें अक्षर से मेल खाता हो।
- पहले अक्षर के लिए: स्थान
iयाi+1से प्रतिस्थापन - अंतिम अक्षर के लिए: स्थान
i-1याiसे प्रतिस्थापन - मध्य अक्षरों के लिए: स्थान
i-1,i, याi+1से प्रतिस्थापन
उदाहरण
इनपुट: str = "TPP"
आउटपुट: 4
व्याख्या:
- T को T (i-वाँ) या पहला P (i+1-वाँ) से प्रतिस्थापित करना = TPP, PPP
- पहले P को T (i-1-वाँ), P (i-वाँ), या दूसरा P (i+1-वाँ) से प्रतिस्थापित करना = TTP, TPP, TPP
- दूसरे P को पहला P (i-1-वाँ) या स्वयं (i-वाँ) से प्रतिस्थापित करना = TPP, TPP
- अद्वितीय संयोजन: TPP, PPP, TTP, PTP
इनपुट: str = "aaa"
आउटपुट: 1
व्याख्या: सभी प्रतिस्थापन "aaa" ही देते हैं।
दृष्टिकोण
प्रत्येक अक्षर के लिए हमारे पास तीन संभावनाएँ होती हैं। यदि वर्तमान अक्षर i के लिए (i-1)-वाँ, i-वाँ, और (i+1)-वाँ सभी अलग-अलग हैं, तो हमारे पास 3 विकल्प हैं। यदि दो समान हैं तो 2 विकल्प, यदि तीनों समान हैं तो केवल 1 विकल्प।
हम स्ट्रिंग को पार करते हैं और अद्वितीयता की जाँच करते हुए 3, 2, या 1 से गुणा करते हैं। पहले और अंतिम अक्षर के लिए, हम 2 या 1 से गुणा करते हैं।
एल्गोरिदम
- स्ट्रिंग
strको कैरेक्टर ऐरे के रूप में लें - फंक्शन
total(char str[], int length)गणना लौटाता है - प्रारंभिक गणना = 1 (मूल शब्द)
- यदि लंबाई 1 है, तो 1 लौटाएँ
- पहले अक्षर (इंडेक्स 0) की जाँच करें: यदि
str[0] == str[1]तो 1 से गुणा करें, अन्यथा 2 से - दूसरे से अंतिम से पहले अक्षर तक लूप करें (इंडेक्स 1 से length-2):
- यदि तीनों समान हैं तो 1 से गुणा करें
- यदि कोई दो समान हैं तो 2 से गुणा करें
- अन्यथा 3 से गुणा करें
- अंतिम अक्षर की जाँच करें: यदि
str[len-1] == str[len-2]तो 1 से गुणा करें, अन्यथा 2 से - गणना लौटाएँ
C++ कार्यान्वयन
#include <bits/stdc++.h>
using namespace std;
int total(char str[], int length) {
int count = 1;
if (length == 1) return count;
if (str[0] == str[1]) count *= 1;
else count *= 2;
for (int j = 1; j < length - 1; j++) {
if (str[j] == str[j-1] && str[j] == str[j+1]) count *= 1;
else if (str[j] == str[j-1]) count *= 2;
else if (str[j] == str[j+1]) count *= 2;
else if (str[j-1] == str[j+1]) count *= 2;
else count *= 3;
}
if (str[length - 1] == str[length - 2]) count *= 1;
else count *= 2;
return count;
}
int main() {
char str[] = "TPP";
int length = strlen(str);
cout << "Count: " << total(str, length) << endl;
return 0;
}
आउटपुट
Count: 4