hdu 1686 Oulipo
来源:互联网 发布:注册表禁止安装软件 编辑:程序博客网 时间:2024/06/08 14:16
本题链接:点击打开链接
本题是求一个主字符串中有多少个子字符串,先输入的是子字符串;本题解法呢,就是采用KMP算法,先对子字符串本身进行编号,首字符标为-1,第二个字符标为0,然后下一位的标法遵循一个准则:若前一位与其所对应下标对应的字符相等,则标记为前一个字符的下标值加一,若不等,则将前一位与刚所比较那个字符对应下标所对应的字符相比较,直至比较到子字符串首,若仍不等,则此字符的下标应为0;对子字符串标号完毕就可以进行与主字符串的比较了,此法效率较高。
参考代码:
#include<stdio.h>#include<string.h>#define LEN 1000010char str[LEN], buf[LEN];int p[LEN];int lens,lenb,cnt;void getnext(){int i=0,j=-1;p[0]=-1;while(i<lens){if(j==-1||str[i]==str[j]){i++;j++;p[i]=j;}else j=p[j];}}void kmp(){int i=0,j=0;while(i<lenb){if(j==-1||str[j]==buf[i]){i++;j++;if(j==lens)cnt++;}elsej=p[j];}}int main(){int T;scanf("%d",&T);while(T--){cnt=0;scanf("%s%s",str,buf);lens=strlen(str);lenb=strlen(buf);getnext();kmp();printf("%d\n",cnt);}return 0;}
0 0
- HDU 1686 Oulipo (kmp)
- hdu 1686 Oulipo
- hdu 1686 Oulipo
- hdu 1686 Oulipo
- hdu 1686 kmp Oulipo
- hdu 1686 Oulipo
- KMP hdu-1686-Oulipo
- HDU 1686 Oulipo
- Hdu 1686 Oulipo[kmp]
- hdu 1686 Oulipo(KMP)
- hdu 1686 Oulipo
- HDU-1686-Oulipo(KMP)
- hdu 1686 Oulipo(KMP)
- hdu 1686 Oulipo(KMP)
- HDU - 1686 Oulipo
- HDU 1686 Oulipo (KMP)
- HDU 1686 Oulipo(KMP)
- HDU 1686 Oulipo - KID
- Windows/MFC_ 如何判断CString类型是否为空
- ThinkPHP学习笔记( 一)安装配置
- ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值
- 解决MAVEN内存溢出
- Golang适合高并发场景的原因分析
- hdu 1686 Oulipo
- IE和火狐的兼容问题汇总
- 关于HTML+css 的一些学习笔记
- Android 中文字体的设置方法和使用技巧
- mybatis注解实现 spring mvc + mybatis+velocity 框架 (附完整项目代码)
- java 学习总结
- spring 文件上传功能实现
- 新浪微博共享登录后无法退出切换账号问题解决
- JVM的相关知识整理和学习