链接: 54. 替换数字
思路
先确定好数字的数量,再根据数字的数量扩容空间,循环判断最后一个字符的种类,依次填充到扩容后的数组。
代码
第一种方法
#include<iostream>
using namespace std;
int main()
{
string s;
while(cin >> s)
{
int sOldIndex = s.size() - 1;
int NUmberCount = 0;
// 统计数字
for(int i = 0; i < s.size(); i++)
{
if(s[i] >= '0' && s[i] <= '9')
NUmberCount++;
}
// 扩充字符串s的大小,也就是将每个数字替换成"number"之后的大小
s.resize(s.size() + 5*NUmberCount);
int sNewIndex = s.size() - 1;
// 从后往前将数字替换为"number"
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--;
}
count << s << endl;
}
}
结果
第一种方法:
时间复杂度: O(n)
空间复杂度: O(1)