zoukankan      html  css  js  c++  java
  • L2-008 最长对称子串

    L2-008 最长对称子串

    题意

    给你一个字符串(可以带空格),求它的最大回文子串。

    思路

    直接马拉车就行,注意开头用下getline就行,没搞懂网上的别的解法什么鬼,第一反应居然不是马拉车。

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <cmath>
    #include <cstdlib>
    #include <cstring>
    #include <string>
    #include <map>
    #include <stack>
    #include <queue>
    #include <vector>
    #include <bitset>
    #include <set>
    #include <utility>
    #define inf 0x3f3f3f3f
    #define INF 0x3f3f3f3f3f3f3f3f
    #define mem(a, b) memset(a, b, sizeof(a))
    #define pb push_back
    #define ll long long
    using namespace std;
    const double PI = acos(-1.0);
    const int N = 2e5 + 10;
    const int mod = 1e9 + 7;
    /////////////////////////////////////////
    string a;
    string b;
    int p[N];
    int pre()
    {
    	b.erase(b.begin(), b.end());
    	int len = a.size();
    	b += "$#";
    	int j = 2;
    	for (int i = 0; i < len; i++)
    	{
    		b += a[i];
    		b += '#';
    		j += 2;
    	}
    	return j;
    }
    int manacher()
    {
    	int len = pre();
    	int ans = -inf, id, mx = 0;
    	for (int i = 1; i < len; i++)
    	{
    		if (i < mx)
    			p[i] = min(p[id * 2 - i], mx - i);
    		else
    			p[i] = 1;
    		while (b[i - p[i]] == b[i + p[i]])
    			p[i]++;
    		if (mx < i + p[i])
    			id = i, mx = i + p[i];
    		ans = max(ans, p[i] - 1);
    	}
    	return ans;
    }
    int main()
    {
    	getline(cin,a);
    	cout<<manacher()<<endl;
    	return 0;
    }
    
  • 相关阅读:
    Kaggle案例分析1--Bestbuy
    [翻译]用神经网络做回归(Using Neural Networks With Regression)
    【MySql】delete用法
    【MySql】like用法
    【MySql】Order By 排序
    【MySql】Group By数据分组
    【shell】一篇文章学懂Shell脚本
    【MySql】删除操作
    python 面向对象编程(高级篇)
    python 面向对象编程(初级篇)
  • 原文地址:https://www.cnblogs.com/Aracne/p/13773324.html
Copyright © 2011-2022 走看看