题目链接

https://pintia.cn/problem-sets/994805046380707840/problems/994805067704549376

思路

法一

因为要求的是最长的对称子串,其实就是求最长回文子串,我们很容易就能和马拉车算法联系起来,由于这里数据比较水所以直接套板子就能过,如果没学过马拉车的话可以带一点技巧的暴力过去

法二

对于一个回文串,要么是奇数长度要么是偶数长度,那么我们只需要枚举中心位置以及回文半径即可,复杂度是 O(N2)O(N^2)O(N2)

法三

我们提前用字符串hash处理,然后同样是枚举回文中心以及回文半径

代码

马拉车

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
#define endl "\n"
#define PII pair<int,int>
#define INF 0x3f3f3f3f#define N 210005char S[N],str[N*2+5];
int len1,len2,ans,p[N*2+5];void init() {//数组初始化,即数组长度翻倍 str[0] = '$';//为了防止数组越界 str[1] = '#';for(int i = 0; i < len1; ++i){str[i * 2 + 2] = S[i];str[i * 2 + 3] = '#';}len2 = len1 * 2 + 2;str[len2] = '*';
}void manacher() {//manacher init();int id = 0,mx = 0;//mx表示的是当前计算回文串最右边字符的最大值 for(int i=0; i < len2; ++i){p[i]=mx > i?min(p[id*2-i],mx-i) : 1;//p[i]=mx>i?min(p[id*2-i],m-i):1; for(; str[i+p[i]] == str[i-p[i]]; p[i]++);//如果字符串对称则对称长度增加 if(p[i]+i > mx)//如果大于当前的最大长度则更新 mx=p[i]+i, id = i;}
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin.getline(S,N-1);len1 = strlen(S);manacher();int maxlen = 0;for(int i = 0; i < len2; ++i)maxlen = max(p[i], maxlen);cout<<maxlen-1<<endl;return 0;
}

暴力枚举

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
#define endl "\n"
#define PII pair<int,int>
#define INF 0x3f3f3f3fint main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);string s;getline(cin,s);int ans,tmp,len = s.size();ans = tmp = 0;for(int i = 0;i < len; ++i) {//长度为奇数情况tmp = 1;for(int j = 1; j < len; j++) {if(i - j < 0 || i + j >= len || s[i - j] != s[i + j])break;tmp += 2;}ans = max(ans,tmp);//长度为偶数情况tmp = 0;for(int j = 1; j < len; j++) {if(i - j + 1 < 0 || i + j >= len || s[i - j + 1] != s[i + j])break;tmp += 2;}ans = max(ans,tmp);}cout<<ans<<endl;return 0;
}

L2-008 最长对称子串(马拉车 or 技巧暴力)相关推荐

  1. pat 团体赛练习题集 L2-008. 最长对称子串

    对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s&quo ...

  2. 7-46 最长对称子串 (25 分)

    7-46 最长对称子串 (25 分) 对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是 ...

  3. 7-250 最长对称子串 (25 分)

    7-250 最长对称子串 (25 分) 对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于 ...

  4. c语言:最长对称子串(3种解决方案)

    c语言:最长对称子串(3种解决方案) 参考文章: (1)c语言:最长对称子串(3种解决方案) (2)https://www.cnblogs.com/McQueen1987/p/3559497.html ...

  5. L2-008. 最长对称子串-PAT团体程序设计天梯赛GPLT

    对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s&quo ...

  6. 【CCCC】L2-008 最长对称子串 (25分),直接枚举遍历

    problem L2-008 最长对称子串 (25分) 对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT& ...

  7. L2-008. 最长对称子串

    L2-008. 最长对称子串 对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PA ...

  8. 最长对称子串 作者 陈越单位 浙江大学

    对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11. 输入格式: 输入在一 ...

  9. 7-17 最长对称子串

    对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11. 输入格式: 输入在一 ...

  10. 最长对称子串(用各个字符确定对称轴进行判断)

    对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11. 输入格式: 输入在一 ...

最新文章

  1. 如何提高增加包含大量记录的表的主键字段的效率
  2. 在C#中用COM操作CAD
  3. 文件服务器vsftp的配置
  4. Android 让图片等比例缩放的三种方法
  5. linux 模式表达式,linux正则表达式和扩展表达式
  6. 编程学习记录12:Oracle数据库的一些基本操作2,表相关操作,添加约束
  7. 线性代数不深入,机器学习两行泪!
  8. xshell 上下左右键乱码和退格键失效
  9. flex producer java_在 Logic Pro 中选取 Flex 与跟随设置
  10. cocos2d-2.0-x-2.0.3 批处理文件create-android-project.bat 创建工程缺失lib解决方法
  11. 处理SQL Server中的重复行
  12. 【操作系统/OS笔记17】文件系统基本概念、文件描述符、文件系统访问、文件别名、文件系统种类
  13. win10 软路由_带你入门软路由 篇一:为什么需要软路由?
  14. php原生检测用户,php代码在线测试_php检测用户在线状态的实例代码
  15. global value supply chain白皮书
  16. 帷幄匠心 c++ qt岗位,一二三四面 2个半小时
  17. 至联云讲解《IPFS凭什么能让全世界投资者疯狂》
  18. Nginx报504 gateway timeout错误的解决方法
  19. ideaIU-2020.1下载
  20. Node.js 安装教程(Windows)

热门文章

  1. Matlab之矩阵的特征值与特征向量求解
  2. MFC隐藏EditControl控件的光标
  3. Tensor的数据统计
  4. 洛谷 P1840 【Color the Axis_NOI导刊2011提高(05)】 题解
  5. Luogu P4161 [SCOI2009]游戏 数论+DP
  6. 【学习总结】GirlsInAI ML-diary day-7-数据类型转换
  7. LMS Algorithm 最小均方算法
  8. 深入理解Flink ---- 系统内部消息传递的exactly once语义
  9. 【vim】vim常用命令
  10. Bootstrap 3.0正式版发布!