国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)之串一:KMP簡(jiǎn)單應(yīng)用

2019-11-10 18:55:01
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

PRoblem Description 給定兩個(gè)字符串string1和string2,判斷string2是否為string1的子串。 Input 輸入包含多組數(shù)據(jù),每組測(cè)試數(shù)據(jù)包含兩行,第一行代表string1(長(zhǎng)度小于1000000),第二行代表string2(長(zhǎng)度小于1000000),string1和string2中保證不出現(xiàn)空格。 Output 對(duì)于每組輸入數(shù)據(jù),若string2是string1的子串,則輸出string2在string1中的位置,若不是,輸出-1。 Example Input

abca12345645abcddd

Example Output

14-1

Hint

Author cjx

#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#define N 1010000using namespace std;void getnext(int *next, char *p)//next數(shù)組的獲取{ int i=-1, j=0; next[0]=-1; while(p[j++]!='/0') { while(p[j]!=p[i+1]&&i>=0) i=next[i]; if(p[j]==p[i+1])next[j]=i++; else next[j]=-1; }}int kmp(char *str1, char *str2, int *next)//KMP算法{ int lstr1=strlen(str1); int lstr2=strlen(str2); int i=-1, j=0; while(i<lstr1-1&&j<lstr2) { if(str1[i+1]==str2[j]) { i++; j++; } else if(i<0)j++; else if(i>=0)i=next[i]; } return (i==lstr1-1)?(j-i):-1;}int main() { char str[ N ] = {0}; char ptr[ N ] = {0}; int next[ N ]; while( ~scanf( "%s%s", str, ptr ) ) { getnext( next, ptr); printf( "%d/n", kmp( ptr,str,next) ); } return 0; }

kmp有不同的實(shí)現(xiàn)形式,主要是不同的next數(shù)組的獲取方法#include

include

include

include

define N 1010000

using namespace std;

void getnext(int *next, char *p) { int i=-1, j=0; next[0]=-1; while(p[j++]!=’/0’) { while(p[j]!=p[i+1]&&i>=0) i=next[i]; if(p[j]==p[i+1])next[j]=i++; else next[j]=-1; } } int kmp(char *str1, char *str2, int *next) { int lstr1=strlen(str1); int lstr2=strlen(str2); int i=-1, j=0; while(i


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 景德镇市| 芜湖县| 广河县| 杂多县| 静乐县| 商水县| 安福县| 柳江县| 水城县| 柳江县| 涿州市| 玛曲县| 阜宁县| 鄂州市| 施甸县| 星座| 铁力市| 禹城市| 樟树市| 五华县| 贵港市| 玉溪市| 无为县| 伊金霍洛旗| 壤塘县| 罗山县| 柯坪县| 望城县| 南京市| 军事| 固始县| 冕宁县| 乌鲁木齐县| 明水县| 横山县| 柯坪县| 沙洋县| 读书| 县级市| 河源市| 神池县|