• 【kmp】 剪花布条 HDU


    【题意概述】

    【解题思路】

      从左往右找,看有几个匹配的字符串,但要注意例如 aaaaaa  aa的输出是3 而不是5,可以这样理解:画布需要减去,一旦减去也就没有了的

    【AC】

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 char p[1005],s[1005];
     5 int  pLen,sLen,Next[1005],ans;
     6 
     7 void GetNext()  
     8 {  
     9     Next[0] = -1;  
    10     int k = -1;  
    11     int j = 0;  
    12     while (j < pLen )  
    13     {  
    14         //p[k]表示前缀,p[j]表示后缀  
    15         if (k == -1 || p[j] == p[k])   
    16         {  
    17             ++k;  
    18             ++j;  
    19             Next[j] = k;  
    20         }  
    21         else   
    22         {  
    23             k = Next[k];  
    24         }  
    25     }  
    26 } 
    27 
    28 int KmpSearch()  
    29 {  
    30     int i = 0;  
    31     int j = 0; 
    32     int ans = 0; 
    33  
    34    
    35     while (i !=sLen && j != pLen)  
    36     {  
    37         //①如果j = -1,或者当前字符匹配成功(即S[i] == P[j]),都令i++,j++      
    38         if (j == -1 || s[i] == p[j])  
    39         {  
    40             i++;   
    41             j++;  
    42         }  
    43         else  
    44         {  
    45             //②如果j != -1,且当前字符匹配失败(即S[i] != P[j]),则令 i 不变,j = next[j]      
    46             //next[j]即为j所对应的next值        
    47             j = Next[j];  
    48         }  
    49        
    50            if(j == pLen) {
    51                ans++;
    52             j = 0;    
    53         }     
    54         
    55     }  
    56 
    57     return ans;   
    58 } 
    59 
    60 
    61 int main() {
    62     
    63     while(~scanf("%s", s)&&s[0] != '#') {
    64         ans = 0;
    65         scanf("%s",p);
    66         pLen = strlen(p);
    67         sLen = strlen(s);
    68         GetNext();
    69         ans = KmpSearch();
    70         printf("%d
    ",ans);  
    71     }
    72      
    73 } 
  • 相关阅读:
    hihocoder 1664
    hihocoder 1654
    javascript高级程序设计学习小结3
    javascript高级程序设计小结2
    javascript高级程序设计学习小结1
    js中原型和原型链理解
    javascript对象封装的常用方式
    vue学习总结2
    vue学习小结1
    JS中一些常用的代码块
  • 原文地址:https://www.cnblogs.com/jj81/p/8856065.html
Copyright © 2020-2023  润新知