HDU 2203(KMP) 親和串
題意是說迴圈掃描母串A(意思就是可以重複遍歷很多次),如果子串B存在於迴圈的母串之中,那麼輸出yes,否則no。
嗯,注意一點:如果串B的長度大於了串A是不行的,因為按照題意所說的子串是包含在母串中的,所以如果串B的長度超過了串A,輸出應該是no。
並且很容易就會發現只要兩個母串就能夠表示出所有可能的子串了。
另外,母串ABCD,子串ABCDA,這樣子串長度是超過母串了的,儘管母串重複之後為ABCDABCD包含ABCDA,仍應該輸出no。
程式碼如下:
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <stack>
typedef long long LL;
using namespace std;
const int MAX = 200002;
int kmp_next[MAX];
void k_next (char *s)
{
int len = strlen(s);
kmp_next[0] = -1;
int k = -1; //front
int j = 0; // behind
while (j < len)
{
if (k == -1 || kmp_next[k] == kmp_next[j])
{
++k;
++j;
if (kmp_next[k] != kmp_next[j])
kmp_next[j] = k;
else
kmp_next[j] = kmp_next[k];
}
else // shipei
k = kmp_next[k];
}
return;
}
bool k_match(char *s, char *b)
{
int slen = strlen(s);
int blen = strlen(b);
int i = 0;
int j = 0;
while (i < slen && j < blen)
{
if (j == -1 || s[i] == b[j])
{
++i;
++j;
}
else
j = kmp_next[j];
}
if (j == blen)
return true;
else
return false;
}
int main()
{
char a[MAX], b[MAX];
char s[MAX];
while (~scanf("%s %s", a, b))
{
strcpy(s, a);
strcat(s, a);
if (strlen(a) < strlen(b))
{
printf("no\n");
continue;
}
k_next(b);
if (k_match(s, b))
printf("yes\n");
else
printf("no\n");
}
return 0;
}
相關文章
- HDU 2594 (KMP入門)KMP
- HDU 1711 Number Sequence(KMP)KMP
- manacher || 擴充套件kmp -- Best Reward HDU - 3613套件KMP
- 【KMP求字串匹配次數】 hdu 1686KMP字串匹配
- HDU 4668 Finding string (解析字串 + KMP)字串KMP
- poj3080-kmp+列舉子串 求最長公共子串KMP
- 【KMP求字串第一個匹配位置】hdu 1711KMP字串
- POJ-1961 Period-KMP字首串重複次數KMP
- 最長迴文子串(百度筆試題和hdu 3068)筆試
- hdu2896 AC自動機-標記哪些模式串在目標串中出現過模式
- 串的應用與kmp演算法講解--學習筆記KMP演算法筆記
- hdu2222 AC自動機-給定串中出現了幾個模式串模式
- 【Kmp求既是字首又是字尾的子串】POJ - 2752 Seek the Name, Seek the FameKMP
- hdu3065 AC自動機-每個標準串在模式串中出現的次數模式
- hdu5384 AC自動機模板題,統計模式串在給定串中出現的個數模式
- 資料結構與演算法JavaScript(五) :串(經典KMP演算法)資料結構演算法JavaScriptKMP
- 【KMP思想求迴圈節】hdu 1358 hust 1010 poj 2406KMP
- 【資料結構&演算法】10-串基礎&KMP演算法原始碼資料結構演算法KMP原始碼
- POJ 2406-Power Strings(重複子串-KMP中的next陣列)KMP陣列
- KMPKMP
- hdu5371 最長迴文子串變形(Manacher演算法)演算法
- Java 的字串和子串Java字串
- KMP模版KMP
- kmp——板子~~~KMP
- KMP模板KMP
- HDU 5769-Substring(字尾陣列-不相同的子串的個數)陣列
- HDU 4622 Reincarnation( 任意區間子串的長度, 字尾陣列+RMQ)陣列MQ
- POJ 3461 kmpKMP
- KMP&exKMPKMP
- 【字串匹配】KMP字串匹配KMP
- 【大話資料結構C語言】22 串的快速模式匹配演算法(KMP演算法)資料結構C語言模式演算法KMP
- 專題十六 KMP & 擴充套件KMP & Manacher【Kuangbin】KMP套件
- KMP Algorithm 字串匹配演算法KMP小結KMPGo字串匹配演算法
- Maven整合SSM和Redis,親測MavenSSMRedis
- 六西格瑪工具:親和圖
- 字串匹配-BF演算法和KMP演算法字串匹配演算法KMP
- KMP演算法和bfprt演算法總結KMP演算法
- hihocoder 1015 KMP演算法 (KMP模板)KMP演算法