zoukankan      html  css  js  c++  java
  • 剪花布条 HDU

    #include <iostream>
    #include <cstring>
    using namespace std;
    const int N = 10010, M = 100010;
    int n, m;
    int ne[N];//ne[i] : 以i为结尾的部分匹配的值
    char s[N], p[N];
    int main() {
    	while(cin>>s+1) {
    		if(s[1]=='#')
    			break;
    		cin>>p+1;
    		int ans=0;
    		n=strlen(p+1);
    		m=strlen(s+1);
    		//求next过程
    		//i从2开始,因为next[1]=0
    		//如果第一个字母失败了,只能从0开始
    		for (int i = 2, j = 0; i <= n; i ++ ) {
    			while (j && p[i] != p[j + 1])    j = ne[j];
    			if (p[i] == p[j + 1])    j ++ ;
    			ne[i] = j;
    		}
    		//kmp匹配过程
    		for (int i = 1, j = 0; i <= m; i ++ ) {
    			while (j && s[i] != p[j + 1])    //当j没有退回起点,并且当前的s[i]不能和下一个j的位置匹配
    				j = ne[j];//移动,保证之前的相等  直到匹配位置,或者j已经到开头了
    			if (s[i] == p[j + 1]) //如果已经匹配了
    				j ++ ;  //j往下移动
    			if (j == n) {//说明匹配成果
    				ans++;
    				j=i+1;
    			}
    		}
    		cout<<ans<<endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    spring无法接收上传文件
    springcloud feign增加熔断器Hystrix
    mybatis调用存储过程(@Select方式)
    spring在注解标注的方法上加切面
    java注解Annotation
    java包装类
    JZ-C-43
    JZ-C-42-Plus
    JZ-C-42
    JZ-C-41-Plus
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12383636.html
Copyright © 2011-2022 走看看