码迷,mamicode.com
首页 > 其他好文 > 详细

codeforces 762 C. Two strings

时间:2018-10-18 10:48:38      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:http   namespace   scanf   ace   params   names   targe   https   force   

关于字符串前缀和后缀的题目

第一点就是从B 串中删除一段连续的子串,结果就是把B串分为三段,如下所示:

| 左边部分 || 删除部分 || 右边部分 |

第二点就是pre数组和suf数组,这里是前缀数组和后缀数组,以实例来解释数组的含义:
以pre数组为例

设A=abacaba,B=abcdcba,串的下标从1开始,枚举A 的每一个字符

pre[ 0 ]=0 ,//作为监视哨

pre[ 1 ]=1 , //A[1]=B[1]

pre[ 2 ]=2 ,//A[2]=B[2]

pre[ 3 ]=2 ,//A[3]!=B[3],所以pre[3]=pre[2]

pre[ 4 ]=3 ,//A[4]=B[3],pre[4]=3

pre[ 5 ]=3 ,

pre[ 6 ]=3 ,

pre[ 7 ]=3 

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#define DEBUG(x) cout<<#x<<" = "<<x<<endl
using namespace std;
const int MAXN=1e5+10;
char A[MAXN];
char B[MAXN];
int pre[MAXN];
int suf[MAXN];
int main()
{
//    freopen("in.txt","r",stdin);
    scanf("%s",A+1);
    scanf("%s",B+1);
    int la=strlen(A+1),lb=strlen(B+1);
    int ptr=1;
    for(int i=1;i<=la ;i++ ){
        if(A[i]==B[ptr]){
            pre[i]=ptr;
            ptr++;
        }
        else pre[i]=pre[i-1];
    }
    ptr=lb;
    suf[la+1]=lb+1;///后缀从右边开始,pre[0]和suf[la+1]监视哨
    for(int i=la;i>=1 ;i-- ){
        if(A[i]==B[ptr]){
            suf[i]=ptr;
            ptr--;
        }
        else suf[i]=suf[i+1];
    }
    int a,b,l=-1;
    for(int i=1;i<=la+1 ;i++ ){///从1开始,0作为监视哨
        if(l==-1){
            l=suf[i]-pre[i-1];
            a=pre[i-1];
            b=suf[i];
        }
        else {
            if(l>suf[i]-pre[i-1]){
                l=suf[i]-pre[i-1];
                a=pre[i-1];
                b=suf[i];
            }
        }
    }
    bool ok=false;
    for(int i=1;i<=lb ;i++ ){
        if(i>a&&i<b)continue;
        printf("%c",B[i]);
        ok=true;
    }
    if(!ok)printf("-");
    printf("\n");
}

参考文献

https://blog.csdn.net/fouzhe/article/details/55188502

codeforces 762 C. Two strings

标签:http   namespace   scanf   ace   params   names   targe   https   force   

原文地址:https://www.cnblogs.com/MalcolmMeng/p/9808389.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!