本文参考代码随想录
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。
首先扩充数组到替换后的大小。
然后用双指针法从后向前替换数字字符。i指向新长度的末尾,j指向旧长度的末尾。
从旧数组从后向前,开始赋值到新数组,将s[j]赋给s[i]
遇到数字开始填充number(也是从后向前)
#include<iostream>
using namespace std;
int main(){
string s;
while(cin >> s){
int sOldIndex = s.size() - 1;
int count = 0;//数字的个数
for(int i = 0;i < s.size(); i++){
if(s[i] >= '0' && s[i] <= '9'){
count++;
}
}
//扩充字符串s的大小
s.resize(s.size() + count * 5);
int sNewIndex = s.size() - 1;
while(sOldIndex >= 0){
if(s[sOldIndex] >= '0' && s[sOldIndex] <= '9'){
s[sNewIndex--] = 'r';
s[sNewIndex--] = 'e';
s[sNewIndex--] = 'b';
s[sNewIndex--] = 'm';
s[sNewIndex--] = 'u';
s[sNewIndex--] = 'n';
}else{
s[sNewIndex--] = s[sOldIndex];
}
sOldIndex--;
}
cout << s << endl;
}
}
时间复杂度O(n)
空间复杂度O(1)