POJ3461 KMP
来源:互联网 发布:曼努埃尔大帝 知乎 编辑:程序博客网 时间:2024/06/09 17:52
T = "ababaaba"的Next数组为 [-1, 0, 1, 2, 3, 1, 2, 3]
再次感悟KMP
import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.StringTokenizer;public class Main {public static void main(String[] args) {new Task().solve() ; }}class Task{InputReader in = new InputReader(System.in) ;PrintWriter out = new PrintWriter(System.out) ;void solve(){int t = in.nextInt() ; while(t-- > 0){ out.println(new KMP(in.next().toCharArray()).searchFrom(in.next().toCharArray())) ; }out.flush() ;}}class KMP {int m;char[] word ;int[] fail;KMP(char[] word) {m = word.length;this.word = word;fail = new int[m + 1];int crt = fail[0] = -1;for (int i = 1; i <= m; i++) {while (crt >= 0 && word[crt] != word[i - 1])crt = fail[crt];fail[i] = ++crt;}}int searchFrom(char[] text) {int n = text.length, count = 0;for (int i = 0, j = 0; i < n; i++) {while (j >= 0 && text[i] != word[j])j = fail[j];if (++j == m) {count++;j = fail[j];}}return count;}}class InputReader {public BufferedReader reader;public StringTokenizer tokenizer;public InputReader(InputStream stream) {reader = new BufferedReader(new InputStreamReader(stream), 32768);tokenizer = new StringTokenizer("");}private void eat(String s) {tokenizer = new StringTokenizer(s);}public String nextLine() {try {return reader.readLine();} catch (Exception e) {return null;}}public boolean hasNext() {while (!tokenizer.hasMoreTokens()) {String s = nextLine();if (s == null)return false;eat(s);}return true;}public String next() {hasNext();return tokenizer.nextToken();}public int nextInt() {return Integer.parseInt(next());}public long nextLong() {return Long.parseLong(next());}public double nextDouble() {return Double.parseDouble(next());}public BigInteger nextBigInteger() {return new BigInteger(next());}}
0 0
- poj3461(KMP)
- POJ3461 KMP
- KMP+poj3461
- poj3461 KMP
- poj3461 KMP
- poj3461 KMP
- POJ3461 KMP
- poj3461 KMP
- poj3461(kmp模版题)
- 【KMP】 poj3461 Oulipo
- poj3461 kmp 模板题
- POJ3461 KMP算法
- poj3461 KMP模板题
- 【KMP】Oulipo POJ3461
- POJ3461《Outplo》方法:KMP
- poj3461 Oulipo (kmp)
- poj3461之kmp入门
- [POJ3461] Oulipo[KMP基础]
- 125. Valid Palindrome
- VS下 jsoncpp的编译使用教程
- Redis 启动命令
- 想要来点网页版的Material Design吗
- 设计模式学习(十)————迪米特法则
- POJ3461 KMP
- Android WindowManager解析与骗取QQ密码案例分析
- linux学习之centos6.6——(1)——系统简介及安装
- 专业化基础——大学计算机基础
- 字符连接
- 利用新架构整合我们的首页和登录页
- MySQL无法通过IP访问,只能使用localhost
- 【河南省第九届ACM程序设计大赛 信道安全 +zzulioj 1925 信道安全 +邻接表 +队列 】
- vijos1196(博弈论)