C++简单题解:
使用一个dp数组表示该位置的数需要右移的位数,用vector保存需要放置*的位置。
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
bool isNum(char c)
{
if(c>='0'&&c<='9')
return true;
return false;
}
int main()
{
string s;
while(cin>>s)
{
int n=s.length();
int dp[n];
for(int i=0; i<n; i++)
dp[i]=0;
vector<int> v;
if(isNum(s[0]))//首个是数字
{
dp[0]=1;
v.push_back(0);
}
for(int i=1; s[i]!='\0'; i++)
{
if( isNum(s[i]) && isNum(s[i-1]) )//aa
dp[i]=dp[i-1];
else if(!isNum(s[i]) && !isNum(s[i-1]))//12
dp[i]=dp[i-1];
else // a1,1a
{
dp[i]=dp[i-1]+1;
v.push_back(i+dp[i-1]);
}
}
char c[n+2+dp[n-1]];
for(int i=0; i<n; i++)
{
if(dp[i]==0)
c[i]=s[i];
else
c[i+dp[i]]=s[i];
}
for(int i=0; i<v.size(); i++)
c[v[i]]='*';
if(!isNum(s[n-1]))//结尾不是数字
c[n+dp[n-1]]='\0';
else
{
c[n+dp[n-1]]='*';
c[n+1+dp[n-1]]='\0';
}
cout << c <<endl;
}
return 0;
}
京公网安备 11010502036488号