C 程式中的字串英數字縮寫?
在這裡,我們將看到一個與給定字串英數字縮寫相關的有趣問題。字串長度小於 10。我們將列印所有英數字縮寫。
英數字縮寫採用了字元與數字混合的形式。該數字的值為未顯示字元的數量。可能有多個未顯示子串。沒有任何兩個子串相互鄰接。讓我們看看該演算法來理解其思路。
演算法
printAbbreviation(s, index, max, str) −
begin if index is same as max, then print str end if add s[index] at the last of str printAbbreviation(s, index + 1, max, str) delete last character from str count := 1 if str is not empty, then if the last character of str is a digit, then add last digit with the count value delete last character from str end if end if add count after the str printAbbreveation(s, index + 1, max, str) end
示例
#include <iostream>
using namespace std;
void printAbbreviation(const string& s, int index, int max_index, string str) {
if (index == max_index) { //if string has ended
cout << str << endl;
return;
}
str.push_back(s[index]); // push the current character to result
printAbbreviation(s, index + 1, max_index, str); //print from next index
str.pop_back(); //remove last character
int count = 1;
if (!str.empty()) {
if (isdigit(str.back())) { //if the last one is digit, then
count += (int)(str.back() - '0'); //count the integer value of that digit
str.pop_back(); //remove last character
}
}
char to_char = (char)(count + '0'); //make count to character
str.push_back(to_char);
printAbbreviation(s, index + 1, max_index, str); //do for next index
}
void printCombination(string str) {
if (!str.length()) //if the string is empty
return;
string str_res;
printAbbreviation(str, 0, str.length(), str_res);
}
int main() {
string str = "HELLO";
printCombination(str);
}輸出
HELLO HELL1 HEL1O HEL2 HE1LO HE1L1 HE2O HE3 H1LLO H1LL1 H1L1O H1L2 H2LO H2L1 H3O H4 1ELLO 1ELL1 1EL1O 1EL2 1E1LO 1E1L1 1E2O 1E3 2LLO 2LL1 2L1O 2L2 3LO 3L1 4O 5
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP