zoukankan      html  css  js  c++  java
  • 调用<string.h>很浪费运行时间

    举两个简单的例子

    题目描述

    克林在打一行字母时总是会打多一个字符,比如想打”july”时会打成”juuly”,这样他需要删掉其中一个’u’。

    克林想知道他可以删掉哪个位置的字符就可以变成他真正想打的一行字母。

    输入

    第一行一个整数:T (测试个数)

    每个测试

    输入两行,两个字符串(全是小写字母)

    串长为 1 到 1000000

    第一个串长度刚好比第二个的长度大一

    输出

    每个测试数据:

    第一行输出可以删除的位置个数 P

    如果P > 0 第二行输出可以删除的位置(小到大,空格隔开,位置从1开始算)

    样例输入

    3
    juuly
    july
    abc
    zz
    aa
    a

    样例输出

    2
    2 3
    0
    2
    1 2
    代码一(正确)
    #include<stdio.h>
    #include<string.h>
    char a[1000010];char b[1000010];
    int main()
    {
        int i,t,n,m,g,k,h,sum,li,len1;
        scanf("%d",&n);
        for(i=0;i<n;i++)
            {
                scanf("%s%s",a,b);
                li=1;
                len1=strlen(a);
                for(t=0;t<len1;t++)
                {
    if(a[t]!=b[t])
                    {
                        g=a[t];
                        h=t;
                        for(m=t;m<len1-1;m++)
                            {if(a[m+1]!=b[m]){li=0;break;}}
                    break;
                    }
                }
                    if(li==0)printf("0
    ");
                    else
                    {sum=1;
                    for(;g==a[t-1];t--){
                        sum=sum+1;}
                    printf("%d
    ",sum);
                    for(k=t+1;k<=h;k++)
                        printf("%d ",k);
                    printf("%d
    ",h+1);
                }
            }
        return 0;
    }
    
    代码二(时间超时)
    #include<stdio.h>
    #include<string.h>
    char a[1000010];char b[1000010];
    int main()
    {
        int i,t,n,m,g,k,h,sum,li;
        scanf("%d",&n);
        for(i=0;i<n;i++)
            {
                scanf("%s%s",a,b);
                li=1;sum=1;
                for(t=0;t<strlen(a);t++)
                {
     
                    if(a[t]!=b[t])
                    {
                        g=a[t];
                        h=t;
                        for(m=t;m<strlen(a)-1;m++)
                            {if(a[m+1]!=b[m]){li=0;break;}}
                    break;
                    }
                    if(a[t]==a[t+1])sum=sum+1;
                    else sum=1;
                }
                    if(li==0)printf("0 ");
                    else
                    {printf("%d ",sum);
                    for(k=h-sum+2;k<=h;k++)
                        printf("%d ",k);
                    printf("%d ",h+1);
                }
            }
        return 0;
    }
  • 相关阅读:
    java基础--13.Regex正则表达式
    java基础面试题12--Integer--自动拆装箱
    java基础面试题11--String--最大公共子串
    笔记本wif模块接线备忘
    windows环境下gcc/g++ 编译器 乱码问题解决
    转轮加密机 加解密 (C语言实现)
    windbg
    windows 内核调试
    python源码编译(嵌入式)
    Android studio
  • 原文地址:https://www.cnblogs.com/dongq/p/4127694.html
Copyright © 2011-2022 走看看