子串查詢
這是一道模板題。
給定一個字串 a和一個字串b ,求 b在 a 中的出現次數。 和 中的字元均為英語大寫字母或小寫字母。
中不同位置出現的 可重疊。
輸入格式
輸入共兩行,分別是字串 a和字串b 。
輸出格式
輸出一個整數,表示 b 在 a中的出現次數。
樣例
樣例輸入
zyzyzyz
zyz
樣例輸出
3
我迷惑的地方是為啥 i++,j++,next[i]=j;不能直接寫成next[i++]=j++;
這是一個自增自減問題 前幾天才給大一講過 沒想到栽在了這裡
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
//const int maxn=1e6+50;
int ne[1000100],len1,len2;
char a[1000100],b[1000100];
void get_next()
{
int j=-1,i=0;
ne[0]=-1;
while(i<len2)
{
if(j==-1||b[i]==b[j])
{
i++; //i仍然是0
j++; //j仍然是-1
ne[i]=j; //在這個裡面 i已經變成1 ,j已經變成·0 ,這與ne[i++]=j++ 不一樣
}
else
j=ne[j];
}
}
void kmp()
{
int j=0,i=0;
int ans=0;
// get_next();
while(i<len1)
{
if(j==-1||a[i]==b[j])
{
++i;
++j;
}
else
j=ne[j];
if(j==len2)
{
j=ne[j];
ans++;
}
}
printf("%d\n",ans);
}
int main()
{
scanf("%s %s",a,b);
len1=strlen(a); //主
len2=strlen(b); //子
if(len2>len1)
printf("0\n");
get_next();
kmp();
return 0;
}
相關文章
- 查詢子串
- 子串查詢;及排列子串分析
- #103. 子串查詢
- 糖果;及子串查詢分析
- 子串查詢函式strstr函式
- Python小技巧 - 子串查詢Python
- BMH子串查詢演算法(PHP實現)演算法PHP
- 子查詢-表子查詢
- 複雜查詢—子查詢
- SQL查詢的:子查詢和多表查詢SQL
- 相關子查詢&非相關子查詢概念
- MySQL子查詢MySql
- 使用子查詢
- MYsql 子查詢MySql
- oracle子查詢Oracle
- 子查詢分解
- 11子查詢
- sql子查詢SQL
- informix子查詢ORM
- MySQL聯結查詢和子查詢MySql
- select查詢之三:子查詢
- mysql-分組查詢-子查詢-連線查詢-組合查詢MySql
- 區分關聯子查詢和非關聯子查詢
- sql語法相關子查詢與非相關子查詢SQL
- exist-in和關聯子查詢-非關聯子查詢
- MySQL之連線查詢和子查詢MySql
- 巢狀子查詢巢狀
- GORM subquery 子查詢GoORM
- SQL--子查詢SQL
- Oracle with重用子查詢Oracle
- oracle with 子查詢用法Oracle
- select子查詢
- mysql的子查詢MySql
- Javaweb-子查詢JavaWeb
- MYSQL學習筆記25: 多表查詢(子查詢)[標量子查詢,列子查詢]MySql筆記
- 子串位置
- Oracle查詢轉換(五)子查詢展開Oracle
- 關聯查詢子查詢效率簡單比照