HDUOJ---(2203)亲和串
亲和串
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6579 Accepted Submission(s): 2976
void get_next(char const * pt , int * next)
{
int i,j=-,len=strlen(pt);
next[i=]=-;
while(i<len)
{
if(j==-||pt[j]==pt[i])
{
++i;
++j;
if(pt[j]!=pt[i])
next[i]=j;
else
next[i]=next[j];
}
else
j=next[j];
}
}
有了上面这个函数,下面的kmp部分其实就是BF算法;
代码如下:
//next设置为全局变量数组,当然也可以设置下面数组中...
int smatch_kmp(char *ps,char *pt )
{
int lens=strlen(ps); //sizoef(pt)/sizeof(char);
int lent=strlen(pt);
int i=,j=-;
//next[]
get_next(ps,next);
while(i<lens&&j<lent)
{
if(j==-||ps[i]==pt[j])
{
++i;
++j;
}
else
j=next[j];
}
if(j==lent)
return i-lent;
else
return -; }
所以此题的代码不难想到了为:
代码:
//BF个改进kmp算法....
/*@code龚细军*/
#include<stdio.h>
#include<string.h>
#define maxn 100000
int next[maxn+];
char pps[maxn+],ppt[maxn+];
/*求next数组的值*/
void getnext(char const *pt ,int *next) //t表示目标串 s代表的是主串
{
int i=,j=-;
next[i]=-;
int len=strlen(pt);
while(i<len)
{
if(j==-||pt[i]==pt[j]) //匹配的情况,或者是开始的赋值
{
i++;
j++;
if(pt[i]!=pt[j]) //再次判断是否匹配
{
next[i]=j;
}
else
next[i]=next[j];
}
else
j=next[j];
}
}
//BF的改进kmp
bool smatch_kmp(char const *s ,char const *t)
{
int lens=strlen(s); //到主串的长度
int lent=strlen(t); //得到目标串的长度
memset(next,,sizeof(next));
getnext(ppt,next);
int i=,j=-;
while(i<*lens&&j<lent)
{
if(j==-||s[i%lens]==t[j]) //目前匹配所以都进位i++,j++
{
i++;
j++;
}
else j=next[j]; //如果是BF的话,需要回溯,再j++ ,但是kmp在此处作出了改进,不必全回溯
}
if(j>=lent)
return ; // i-lent; 说明是匹配成功了..
else
return ; //说面并未匹配成功 } int main()
{ while(scanf("%s%s",pps,ppt)!=EOF)
puts(smatch_kmp(pps,ppt)==true?"yes":"no");
return ;
}
HDUOJ---(2203)亲和串的更多相关文章
- HUD 2203 亲和串
HUD 2203 亲和串 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768K (Java/Others) [题目描述 - ...
- HDOJ 2203 亲和串 【KMP】
HDOJ 2203 亲和串 [KMP] Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 2203 亲和串(KMP)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=2203 题目: 亲和串 Time Limit: 3000/1000 MS (Java/Others) ...
- hdu 2203:亲和串(水题,串的练习)
亲和串 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- hdoj 2203 亲和串
亲和串 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDOJ/HDU 2203 亲和串(简单的判断~Java的indexOf()方法秒)
Problem Description 人随着岁数的增长是越大越聪明还是越大越笨,这是一个值得全世界科学家思考的问题,同样的问题Eddy也一直在思考,因为他在很小的时候就知道亲和串如何判断了,但是发现 ...
- hdu 2203 亲和串
把T串扩展成两倍 然后KMP 注意T的长度要大于P的长度 #include <iostream> #include <cstdio> #include <cstri ...
- hdu 2203亲和串 (kmp)
#include<cstdio>#include<iostream>#include<cstring>#include<string>using nam ...
- 【HDU 2203】亲和串
题 题意 给你一个字符串s1,字符串s2,s1循环移位,使s2包含在s1中,则s2 是s1的亲和串 分析 把s1自身复制一遍接在后面. 方法一: 用strstr函数. 方法二: KMP算法. 方法三: ...
- HDU2203 亲和串
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
随机推荐
- FFmpeg深入分析之零-基础
FFmpeg是相当强大的多媒体编解码框架,在深入分析其源代码之前必须要有基本的多媒 体基础知识,否则其源代码会非常晦涩难懂.本文将从介绍一些基本的多媒体只是,主要是为研读ffmpeg源代码做准备,比如 ...
- 编译打包工具sbt的镜像设置
sbt可以和maven共用一个镜像,公司内部有的自然最后不过 创建文件:~/.sbt/repositories [repositories] local aliyun: http://maven.al ...
- leetcode笔记:Same Tree
一. 题目描写叙述 Given two binary trees, write a function to check if they are equal or not. Two binary tre ...
- iOS开发-简单的图片查看器
现在你只要拿着手机,不管你Android还是iOS,新闻类的App不可避免都有一个功能就是图片查看,做个专题,查看一下内容,App Store中也有专门针对图片浏览的App,鉴于目前所知有限,无法做到 ...
- AngularJs HTTP响应拦截器实现登陆、权限校验
$httpAngularJS 的 $http 服务允许我们通过发送 HTTP 请求方式与后台进行通信.在某些情况下,我们希望可以俘获所有的请求,并且在将其发送到服务端之前进行操作.还有一些情况是,我们 ...
- C#代码审查工具 StyleCop
SourceAnalysis (StyleCop)的终极目标是让所有人都能写出优雅和一致的代码,因此这些代码具有很高的可读性. SourceAnalysis (StyleCop)不是代码格式化(代码美 ...
- CF 463D Gargari and Permutations [dp]
给出一个长为n的数列的k个排列(1 ≤ n ≤ 1000; 2 ≤ k ≤ 5).求这个k个数列的最长公共子序列的长度 dp[i]=max{dp[j]+1,where j<i 且j,i相应的字符 ...
- bash參考手冊之六(Bash特性)
6 Bash 特性 这部分描写叙述Bash独有的特性. * 调用Bash : Bash能够接受的命令行选项. * Bash启动文件 : Bash何时及怎样运行脚本. * 交互Shell : 什么 ...
- linux ---jenkins的安装与配置
linux下的jenkins的安装: Jenkins 下载网址: http://jenkins-ci.org/ 1.准备:JDK环境,tomcat环境,maven环境,jenkins.war包 2.在 ...
- Discuz常见大问题-如何允许用户插入视频-如何允许用户在编辑帖子的时候带标签,允许用户插入视频
在用户-用户组中,切换到会员用户组或系统用户组,可以勾选批量编辑前面的方框,然后点击批量编辑 点击论坛相关-帖子相关(默认是基本设置,你可以在这里设置所有用户的所有权限),然后把你要设置允许的用户的组 ...