题解 | #单词倒排#
表示数字
http://www.nowcoder.com/practice/637062df51674de8ba464e792d1a0ac6
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; }