代码随心录 54替换数字
也是比较简单的一道题,声明一个ans字符串用来保存替换后的字符串,思路就是遇到不需要替换直接加入ans,遇到需要替换的就将一个“number”加入ans。使用了O(N)的额外空间,时间复制度为O(N)。
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
string ans;
while(cin>>s)
{
int len = s.size();
for(int i=0; i<len; ++i)
{
if( 'a' <= s[i] && s[i] <= 'z')
ans = ans + s[i];
else
{
ans = ans + "number";
}
}
std::cout << ans << std::endl;
}
}
题解提供了一种使用双指针的方法,空间复杂度为O(1),具体思路就是先计算需要扩充的大小,然后从尾部开始替换字符串
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
string ans;
while(cin>>s)
{
int len = s.size();
int num_count=0;
for(int i=0; i<len; ++i)
{
if ( '0'<=s[i] && s[i] <='9' )
num_count++;
}
s.resize(s.size() + num_count*5 );
int new_len = s.size();
int left = len - 1;
int right = new_len - 1;
while(left >= 0)
{
if( '0'<=s[left] && s[left] <='9' )
{
s[right--] = 'r';s[right--] = 'e';s[right--] = 'b';
s[right--] = 'm';s[right--] = 'u';s[right--] = 'n';
left--;
}
else
{
s[right] = s[left];
left--;
right--;
}
}
std::cout << s << std::endl;
}
}

浙公网安备 33010602011771号