浙江省赛K - Strings in the Pocket

思路:假若给的两个字符串不是完全一样的,找到两个字符串第一个不一样的位置pos1和最后一个不一样的位置pos2,得到区间[pos1,pos2],我们尝试翻转这个区间,若翻转之后的第一个字符串和第二个字符串仍然不一样的话,则答案为0,否则扩展这个区间的两边,若每次扩展两边的字母一样的话,答案加1,否则停止扩展。假若给的两个字符串完全一样,则用Manacher算法计算字符串回文子串的数量

代码:

#include
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const ll maxn=2e6+9;
ll book[300],p[maxn*2];
string s1,s2;
char s_new[maxn*2];
int Init()
{
    int len = s1.size();
    s_new[0] = '$';
    s_new[1] = '#';
    int j = 2;

    for (int i = 0; i < len; i++)
    {
        s_new[j++] = s1[i];
        s_new[j++] = '#';
    }

    s_new[j] = '\0';  //别忘了哦
    return j;  //返回s_new的长度
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	ll i,j,k,n,t;
	cin>>t;
	while(t--){
		cin>>s1>>s2;
		if(s1.size()!=s2.size()){
			cout<<0<=0&&ed+i

 

你可能感兴趣的:(字符串)