子串查詢
這是一道模板題。
給定一個字串 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;
}
相關文章
- Python小技巧 - 子串查詢Python
- 複雜查詢—子查詢
- SQL查詢的:子查詢和多表查詢SQL
- MYsql 子查詢MySql
- MySQL子查詢MySql
- mysql-分組查詢-子查詢-連線查詢-組合查詢MySql
- 區分關聯子查詢和非關聯子查詢
- MySQL之連線查詢和子查詢MySql
- Javaweb-子查詢JavaWeb
- 巢狀子查詢巢狀
- GORM subquery 子查詢GoORM
- MYSQL學習筆記25: 多表查詢(子查詢)[標量子查詢,列子查詢]MySql筆記
- 遞迴查詢子元素遞迴
- 教你使用SQLite 子查詢SQLite
- MySQL 相關子查詢MySql
- 【MySQL】檢視&子查詢MySql
- MYSQL學習筆記26: 多表查詢|子查詢MySql筆記
- MySQL資料庫基礎——多表查詢:子查詢MySql資料庫
- MySQL全面瓦解11:子查詢和組合查詢MySql
- 34. 過濾條件、多表查詢、子查詢
- 子串位置
- Laravel Query Builder 複雜查詢案例:子查詢實現分割槽查詢 partition byLaravelUI
- 什麼是SQL 語句中相關子查詢與非相關子查詢SQL
- exists與in子查詢優化優化
- Oracle OCP(08):使用子查詢Oracle
- 子字串查詢演算法字串演算法
- StoneDB 子查詢最佳化
- Laravel 子查詢語句用法Laravel
- 最長子串
- mysql求交集:UNION ALL合併查詢,inner join內連線查詢,IN/EXISTS子查詢MySql
- PostgreSQL 原始碼解讀(29)- 查詢語句#14(查詢優化-上拉子查詢)SQL原始碼優化
- 30串聯所有單詞的子串
- 原創:oracle 子查詢介紹Oracle
- SQL語言基礎(子查詢)SQL
- sql-server不相關子查詢SQLServer
- sql-server相關子查詢SQLServer
- 最長上升子串
- 子串匹配 BF法