剪花布條(kmp基礎變形)
題目描述
一塊花布條,裡面有些圖案,另有一塊直接可用的小飾條,裡面也有一些圖案。對於給定的花布條和小飾條,計算一下能從花布條中儘可能剪出幾塊小飾條來呢?
輸入
輸入中含有一些資料,分別是成對出現的花布條和小飾條,其布條都是用可見ASCII字元表示的,可見的ASCII字元有多少個,布條的花紋也有多少種花樣。花紋條和小飾條不會超過1000個字元長。如果遇見#字元,則不再進行工作。
輸出
輸出能從花紋布中剪出的最多小飾條個數,如果一塊都沒有,那就老老實實輸出0,每個結果之間應換行。
樣例輸入
abcde a3
aaaaaa aa
#
樣例輸出
0
3
AC碼:
/*KMP演算法*/
#include<stdio.h>
#include<string.h>
const int maxn=1005;
int m,n,nxt[maxn];
char s[maxn],t[maxn];//s[]為模式串,t[]為匹配串
void getnext()
{
nxt[0]=0;
for(int i=1;i<n;i++)
{
int j=nxt[i-1];
while(t[j]!=t[i]&&j>0)
{
j=nxt[j-1];
}
if(t[j]==t[i])
nxt[i]=j+1;
else nxt[i]=0;
}
}
int kmp()
{
int j=0;
int ans=0;
for(int i=0;i<m;i++)
{
while(t[j]!=s[i]&&j>0)
j=nxt[j-1];
if(t[j]==s[i]) j++;
if(j>=n)
{
ans++;
j=0;
}
}
return ans;
}
int main()
{
while(~scanf("%s",s))
{
if(s[0]=='#')
break;
scanf("%s",t);
m=strlen(s);
n=strlen(t);
getnext();
printf("%d\n",kmp());
}
return 0;
}
相關文章
- canvas錐形漸變進度條Canvas
- SVG 基礎圖形SVG
- 杭州短視訊剪輯培訓,零基礎學習找沐林電商學院秒變剪輯大神
- 圖形學基礎知識
- Vue基礎-條件渲染Vue
- Java 條形碼生成(一維條形碼)Java
- 0基礎怎麼學習短視訊剪輯,並通過剪輯賺錢?
- [shell基礎]——變數變數
- Shader 繪製基礎圖形
- OpenGL基礎圖形程式設計(四)基礎程式結構程式設計
- Java基礎-基礎語法-變數與常量Java變數
- svg和css3建立環形漸變進度條SVGCSSS3
- 【matplotlib基礎】--3D圖形3D
- HDU 5326 Work (基礎樹形dp)
- [java基礎]之變數Java變數
- Python基礎:變數Python變數
- 【scipy 基礎】--傅立葉變換
- JavaScript基礎(二)變數JavaScript變數
- PHP基礎__變數、常量PHP變數
- python變數基礎Python變數
- python第二階段(15)numpy入門基礎-視覺化之條形圖Python視覺化
- WPF基礎:在Canvas上繪製圖形Canvas
- python_基礎_變數Python變數
- PHP->GO 基礎-變數PHPGo變數
- c++基礎三(變數)C++變數
- java基礎變數的交換Java變數
- Bootstrap系列 -- 38. 基礎導航條boot
- 字串匹配基礎下——KMP 演算法字串匹配KMP演算法
- Java圖形設計和多媒體基礎Java
- 第12周-Microwave皮膚圖形介面基礎
- Windows程式設計系列:圖形程式設計基礎Windows程式設計
- [.net 物件導向程式設計基礎] (5) 基礎中的基礎——變數和常量物件程式設計變數
- 弱校聯萌十一大決戰之強力熱身 C.Censor (KMP變形 好題)KMP
- 【液晶模組系列基礎視訊】4.5.X-GUI圖形介面庫-進度條等函式簡介GUI函式
- 基礎架構之百變魔方架構
- 基礎 變數的作用範圍變數
- Js基礎知識(一) – 變數JS變數
- Go基礎系列:常量和變數Go變數