习题3-9 子序列 UVa10340

算法竞赛入门经典(第2版)第3章 数组和字符串
习题3-9 子序列 UVa10340
感悟。
1、上网站下载英文原题,仔细阅读,有些疑惑未解,但自觉不影响编程,稍作思考,开始写代码。

2、像吃豆腐一样简单,很快就完成编码,但一测试样例,大量的通不过,开始跟踪代码。

3、便跟踪边写代码,代码写完,题意也就理解得差不多了,提交Runtime error。

4、将数组从1000开到10000,提交Runtime error,将数组从10000开到100000,提交WA。

5、UVa里几乎没有菜题,一次就AC,好难啊。

6、凭自身实力已无法改正WA,有什么遗漏呢?参考http://blog.csdn.net/thudaliangrx/article/details/50699439代码这么短,都能AC。给了很大的信心。

7、无意中想到一组无法测试通过的数据

AAA ABCD

Yes

马上想到问题所在,修改代码,提交AC,眼泪都快掉下来了,太不容易了,尤其是想到无法通过测试的数据。

附上代码

环境Dev-cpp4.9.9.2

#include <stdio.h>
#include <string.h>


char sub[100000],s[100000];
int book[100000];
int main(){
    int sublen,slen;
    int i,j;
    int flag;
    int min;
    while(scanf("%s%s",sub,s)!=EOF){
        sublen=strlen(sub);
        slen=strlen(s);
        memset(book,-1,sizeof(book));


        min=0;
        for(i=0;i<sublen;i++){//根据子串扫描父串,若找到则对book进行标记 
            for(j=min;j<slen;j++){//用过字符之后的字符才有效 
                if(sub[i]==s[j]){
                    book[i]=j;
                    min=j+1;//min为当前所用字符的后面一位。WA变为AC,只是修改了min=j;变为min=j+1; 
                    break;
                }
            }
        }
        
        flag=1;
        for(i=0;i<sublen;i++){
            if(book[i]==-1){//没找到该字符 
                flag=0;
                break;
            }
        }
                
        if(flag)
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值