题意:

输入一个字符串,在字符串中所有连续的数字子串左右各加一个*,输出处理后的字符串。

解法(while循环)

#include<bits/stdc++.h>
using namespace std;
int main(){
    ios::sync_with_stdio(false);
    string s;
    while(cin>>s){
        string ans;//答案字符串
        int idx=0;//当前下标
        while(idx<s.size()){
            if(s[idx]>='0'&&s[idx]<='9'){
                //如果是数字串
                ans.push_back('*');
                //在前面加一个*
                while(idx<s.size()&&s[idx]>='0'&&s[idx]<='9'){
                    //扫描连续的数字串,作为一个整体
                    ans.push_back(s[idx]);
                    idx++;
                }
                ans.push_back('*');
                //在后面加一个*
            }else{
                ans.push_back(s[idx]);//否则直接追加到答案字符串里
                idx++;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}
时间复杂度:,其中为字符串长度,显然,对于字符串每一位,我们只需要的时间来处理,故时间复杂度为
空间复杂度:,我们存储答案字符串需要的空间,故空间复杂度为