zoukankan      html  css  js  c++  java
  • [codeVS1204] 寻找子串位置

    时间限制: 1 s空间限制: 128000 KB题目等级 : 青铜 Bronze

    题目描述 Description
    给出字符串a和字符串b,保证b是a的一个子串,请你输出b在a中第一次出现的位置。
    输入描述 Input Description
    仅一行包含两个字符串a和b
    输出描述 Output Description
    仅一行一个整数
    样例输入 Sample Input
    abcd bc
    样例输出 Sample Output
    2
    数据范围及提示 Data Size & Hint
    字符串的长度均不超过100
    Pascal用户请注意:两个字符串之间可能包含多个空格

    思路

    首先,这是个暴力模拟的题;

    然后,可以用KMP算法A掉!

    所以。。。

    代码实现

     1 #include<cstdio>
     2 #include<cstring>
     3 const int maxn=110;
     4 int p[maxn],la,lb;
     5 char a[maxn],b[maxn];
     6 int main(){
     7     scanf("%s%s",a,b);
     8     la=strlen(a),lb=strlen(b),p[0]=-1;
     9     for(int i=1,j=-1;i<lb;i++){
    10         while(j>-1&&b[j+1]!=b[i]) j=p[j];
    11         if(b[j+1]==b[i]) j++;
    12         p[i]=j;
    13     }
    14     for(int i=0,j=-1;i<=la;i++){
    15         while(j>-1&&b[j+1]!=a[i]) j=p[j];
    16         if(b[j+1]==a[i]) j++;
    17         if(j==lb-1){
    18             printf("%d
    ",i-lb+2);
    19             return 0;
    20         }
    21     }
    22 }
  • 相关阅读:
    多姿多彩的线程
    字典操作
    字符串语法
    购物车
    列表常用语法
    整数划分问题
    计算N的阶层
    判断是否是素数
    快速排序
    冒泡排序
  • 原文地址:https://www.cnblogs.com/J-william/p/7077723.html
Copyright © 2011-2022 走看看