代码随心录 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;
    }
   
}
posted @ 2025-02-14 20:47  名字好难想zzz  阅读(10)  评论(0)    收藏  举报