字符串的字母数字缩写

``````Input : ANKS
Output :
ANKS (nothing is replaced)
ANK1 (S is replaced)
AN1S (K is replaced)
AN2  (KS is replaced)
A1KS (N is replaced)
A1K1 (N and S are replaced)
A2S (NK is replaced)
A3 (NKS is replaced)
1NKS (A is replaced)
1NK1 (A and S are replaced)
1N1S (A and N is replaced)
1N2 (A and KS are replaced)
2KS (AN is replaced)
2K1 (AN and S is replaced)
3S (ANK is replaced)
4 (ANKS is replaced)

Input : ABC
Output :
ABC
AB1
A1C
A2
1BC
1B1
2C
3
Note: 11C is not valid because no two digits should be adjacent, 2C is the correct one because AB is a substring, not A and B individually``````

推荐：请尝试以下方法{IDE}首先, 在继续解决方案之前。

1. 按原样考虑字符。
2. 添加字符进行计数。如果没有计数, 请使用1。

``````// C++ program to print all Alpha-Numeric Abbreviations
// of a String
#include <bits/stdc++.h>
using namespace std;

// Recursive function to print the valid combinations
// s is string, st is resultant string
void printCompRec( const string& s, int index, int max_index, string st)
{
// if the end of the string is reached
if (index == max_index) {
cout << st << "\n" ;
return ;
}

// push the current character to result
st.push_back(s[index]);

// recur for the next [Using Char]
printCompRec(s, index + 1, max_index, st);

// remove the character from result
st.pop_back();

// set count of digits to 1
int count = 1;

if (!st.empty()) {

if ( isdigit (st.back())) {

// get the digit and increase the count
count += ( int )(st.back() - '0' );

st.pop_back();
}
}

// change count to a character
char to_print = ( char )(count + '0' );

// add the character to result
st.push_back(to_print);

// recur for this again [Using Count]
printCompRec(s, index + 1, max_index, st);
}

// Wrapper function
void printComb(std::string s)
{
// if the string is empty
if (!s.length())
return ;

// Stores result strings one one by one
string st;

printCompRec(s, 0, s.length(), st);
}

// driver function
int main()
{
string str = "GFG" ;
printComb(str);
return 0;
}``````

``````GFG
GF1
G1G
G2
1FG
1F1
2G
3``````