2019浙江省程序设计竞赛 K:Strings in the Pocket(马拉车算法)

【题面】

Strings in the Pocket

【题解】

题意:给定两个字符串s,t,能否通过一次反转操作使得s变成t,输出可能情况的数目。

思路:如果两个字符串相同,①不相同的部分不可通过反转操作转化,答案为0 ②不相等的部分可通过反转操作转化,则从不相等部分的两边往外匹配相同的部分,则答案就是往外匹配的长度+1;如果两个字符串相同,③用马拉车算法寻找以所有位置s[i]为中心的最长回文串,答案就是所有最长回文串长度/2求和的结果。

马拉车算法小结+模板题

【代码】

#include 
using namespace std;
#define ll long long
const int mxn=2e6+5;
char s[mxn],t[mxn];
char tmp[2*mxn];
ll Len[2*mxn];
int len;
bool check(int l,int r)
{
    for(int i=l,j=r;i<=r;i++,j--)
        if(s[i]!=t[j])
            return false;
    return true;
}
void manacher()
{
    ll mx=0,pos=0;
    for(ll i=1;i=0;i++,j--){
                    if(s[i]==s[j]) ans++;
                    else break;
                }
            }
        }
        else ans=init();
        printf("%lld\n",ans);
    }
}

 

你可能感兴趣的:(2019浙江省程序设计竞赛 K:Strings in the Pocket(马拉车算法))