题解 | #表示数字#

表示数字

http://www.nowcoder.com/practice/637062df51674de8ba464e792d1a0ac6

表示数字

描述

将一个字符中所有的整数前后加上符号“*”,其他字符保持不变。连续的数字视为一个整数。
注意:本题有多组样例输入。
输入描述:
输入一个字符串
输出描述:
字符中所有出现的数字前后加上符号“*”,其他字符保持不变

方法一

思路分析

本题我的第一个想法是,首先设置判断数组判断每一位上面的字符是否为数字,如果是数字则记录为1,之后遍历字符串数组,如果是数字 首先输出*,输出连续的数字,最后输出*,不过代码没有通过

核心代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string temp;
    while(cin>>temp)
    {
        //cout<<temp<<endl;
        int n=temp.length();
        //cout<<n<<endl;
        vector<int>dp(n,0);
        for(int i=0;i<n;i++)
        {
            if(isdigit(temp[i]))//判断是否为数字 1表示为数字
            {
                if(i==0) dp[i]=1;
                else dp[i]=dp[i-1]+1;
            }
        }
//         for(int i=0;i<n;i++)
//             cout<<dp[i];
//         cout<<endl;
        string new_temp;
        int i=0;
        for(;i<n;)
        {
            if(dp[i]==0)//不是数字直接输出
            {
                cout<<temp[i];
                i++;
            }
            if(dp[i]==1)//如果是数字 首先输出*
            {
                int k=i;
                int count=1;
                cout<<"*";
                while(dp[i+1]!=0&&i<n)//输出连续的数字
                {
                    i++;
                }
                int j=i;
                
                cout<<temp.substr(k,j-k);
                cout<<"*";
                i=j;
            }      
        }
     //cout<<temp<<endl;
    }
    return 0;
}

复杂度分析

  • 时间复杂度:时间复杂度为$O(n)$
  • 空间复杂度:定义了一个数组判断是否为数字,空间复杂度为$O(1)$


方法二

思路分析

方法一种其实本不必设置一个数组存储判断结果,因此方法二直接判断,暴力解法

图解

字符串 Jkdi234klo
输出 J

k
d
i
遇到数字先输出* *

234
遇到的不是数字,输出*
*

k
l
o


核心代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string temp;
    while(cin>>temp)
    {
        int n=temp.length();
        for(int i=0;i<n;)//单个字符判断
        {
            if(isdigit(temp[i]))//数字判断
            {
                cout<<"*";
                while(isdigit(temp[i]))//找到数字子串并输出
                {
                   cout<<temp[i];
                    i++;
                }
                cout<<"*";//数字子串最后的位置输出*
            }
            else
            {
                cout<<temp[i];
                i++;
            }
        }
        cout<<endl;
        
    }
}

复杂度分析

  • 时间复杂度:时间复杂度为$O(n)$
  • 空间复杂度:空间复杂度为$O(1)$

方法三

思路分析

不调用判断数字的函数

核心代码

#include<stdio.h>
#include<string.h>
int main()
    {
    int i,len;
    char str[1000];
    while(scanf("%s",str)!=EOF)
        {
        len=strlen(str);
        for(i=0;i<len;)
            if(str[i]>='0'&&str[i]<='9')
            {
            printf("*");
            while(str[i]>='0'&&str[i]<='9')
                {
                printf("%c",str[i]);
                i++;
            }
            printf("*");
        }
        else 
        {
            printf("%c",str[i]);
            i++;
        }
    printf("\n");
    }
    return 0;
}

复杂度分析

  • 时间复杂度:时间复杂度为$O(n)$
  • 空间复杂度:空间复杂度为$O(1)$
全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
3209次浏览 43人参与
# HR最不可信的一句话是__ #
1021次浏览 32人参与
# MiniMax求职进展汇总 #
24900次浏览 321人参与
# 春招至今,你的战绩如何? #
14766次浏览 137人参与
# AI面会问哪些问题? #
893次浏览 22人参与
# 你的实习产出是真实的还是包装的? #
2704次浏览 52人参与
# 巨人网络春招 #
11484次浏览 224人参与
# 沪漂/北漂你觉得哪个更苦? #
1235次浏览 38人参与
# 你做过最难的笔试是哪家公司 #
1131次浏览 20人参与
# AI时代,哪个岗位还有“活路” #
2684次浏览 49人参与
# XX请雇我工作 #
51147次浏览 171人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7966次浏览 43人参与
# 简历第一个项目做什么 #
32073次浏览 357人参与
# 简历中的项目经历要怎么写? #
310908次浏览 4257人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152832次浏览 889人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187556次浏览 1123人参与
# AI时代,哪些岗位最容易被淘汰 #
64539次浏览 864人参与
# 如果重来一次你还会读研吗 #
229974次浏览 2011人参与
# 投格力的你,拿到offer了吗? #
178254次浏览 891人参与
# 你怎么看待AI面试 #
180654次浏览 1296人参与
# 正在春招的你,也参与了去年秋招吗? #
364172次浏览 2641人参与
# 腾讯音乐求职进展汇总 #
160822次浏览 1114人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务