51NOD 1088 最长回文子串&1089 最长回文子串 V2(Manacher算法)
输入Str(Str的长度 <= 1000(第二题要求为100000))
输出最长回文子串的长度L。
daabaac
5
解:
#include <stdio.h> int main()
{
char s[];
while (scanf_s("%s", s, ) != EOF)
{
int max = ;
for (int i = , j, a; s[i] != ; i++)
{
for (j = ; j <= i; j++)
if (s[i + j + ] != s[i - j - ])break;
a = j * + ;
max = a > max ? a : max;
for (j = ; j <= i; j++)
if (s[i + + j] != s[i - j])
break;
a = j * ;
max = a > max ? a : max;
}
printf("%d\n", max);
}
}
后来找了一些其他的解法,比较著名的是Manacher算法,它通过插入“#”的方式将我程序中的两类讨论变为了一种情况,避免了分类讨论,同时也优化了寻找过程。
Manacher实现:
//1089 最长回文子串 V2(Manacher算法)
#include <stdio.h>
#include <string.h>
#define CLR(x,len) memset(x, '#', len) char s1[], s2[];
int p[]; int main()
{
while (scanf_s("%s", s1, ) != EOF)
{
int dis = , st = , i, len = (strlen(s1) << ) + , ans = ;
CLR(s2, len);
s2[len] = ;
for (i = ; s1[i] != ; i++) s2[i << | ] = s1[i];
i = ;
for (int temp ; i < len; i++)
{
if (i < dis) p[i] = p[(st << ) - i] > dis - i ? dis - i : p[(st << ) - i];
else p[i] = ;
while (i - p[i] > && s2[i + + p[i]] == s2[i - - p[i]]) p[i]++;
if (p[i] + i > dis)
{
dis = p[i] + i;
st = i;
}
if (s2[i + p[i]] != '#') temp = ;
else temp = ;
ans = ans > p[i] + temp ? ans : p[i] + temp;
}
printf("%d\n", ans);
}
}
51NOD 1088 最长回文子串&1089 最长回文子串 V2(Manacher算法)的更多相关文章
- 51Nod 1089 最长回文子串 V2 —— Manacher算法
题目链接:https://vjudge.net/problem/51Nod-1089 1089 最长回文子串 V2(Manacher算法) 基准时间限制:1 秒 空间限制:131072 KB 分值: ...
- 最长回文子串(动规,中心扩散法,Manacher算法)
题目 leetcode:5. Longest Palindromic Substring 解法 动态规划 时间复杂度\(O(n^2)\),空间复杂度\(O(n^2)\) 基本解法直接看代码 class ...
- 51Nod 1089:最长回文子串 V2(Manacher算法)
1089 最长回文子串 V2(Manacher算法) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 回文串是指aba.abba.cccbccc.aaa ...
- 51nod(1089 最长回文子串 V2)(hash 加二分)
1089 最长回文子串 V2(Manacher算法) 回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串. 输入一个字符串Str,输出Str里最长回文子串的长度. 输入 ...
- (最长回文子串 线性DP) 51nod 1088 最长回文子串
输入一个字符串Str,输出Str里最长回文子串的长度. 回文串:指aba.abba.cccbccc.aaaa这种左右对称的字符串. 串的子串:一个串的子串指此(字符)串中连续的一部分字符构成的子(字符 ...
- 1089 最长回文子串 V2(Manacher算法)
1089 最长回文子串 V2(Manacher算法) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 回文串是指aba.abba.cccbccc.aaaa ...
- 51 Nod 1089 最长回文子串(Manacher算法)
1089 最长回文子串 V2(Manacher算法) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 回文串是指aba.abba.cccbccc.aaa ...
- 51nod1089(最长回文子串之manacher算法)
题目链接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1089 题意:中文题诶~ 思路: 我前面做的那道回文子串的题 ...
- [51Nod1089] 最长回文子串 V2(Manacher算法)
1089 最长回文子串 V2(Manacher算法) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 回文串是指aba.abba.cccbccc.aaaa这种左右对称 ...
随机推荐
- 使用谷歌Z生成条形码以及二维码
下载地址:http://zxingnet.codeplex.com/ zxing.net是.net平台下编解条形码和二维码的工具,使用非常方便. 首先下载二进制dll文件,引入工程: using Sy ...
- android 实现照相功能 照片存放在SID卡中,将照片显示在Image中
protected static final int CAMERA_RESULT = 0; private String fileName; private Button takePhotoBn; p ...
- POJ 2186 tarjan+缩点 基础题
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 37111 Accepted: 15124 De ...
- Codeforces 631A Interview【模拟水题】
题意: 模拟模拟~~ 代码: #include<iostream> using namespace std; const int maxn = 1005; int a[maxn], b[m ...
- [bzoj3196][Tyvj1730]二逼平衡树_树套树_位置线段树套非旋转Treap/树状数组套主席树/权值线段树套位置线段树
二逼平衡树 bzoj-3196 Tyvj-1730 题目大意:请写出一个维护序列的数据结构支持:查询给定权值排名:查询区间k小值:单点修改:查询区间内定值前驱:查询区间内定值后继. 注释:$1\le ...
- [bzoj3436]小K的农场_差分约束
小K的农场 bzoj-3436 题目大意:给定n个点,每个节点有一个未知权值.现在有m个限制条件,形如:点i比点j至少大c,点i比点j至多大c或点i和点j相等.问是否可以通过给所有点赋值满足所有限制条 ...
- Ubuntu 16.04通过Magent搭建Memcached集群(转)
一.下载Magent 官网:https://code.google.com/archive/p/memagent/downloads 离线版本:(链接: https://pan.baidu.com/s ...
- 8VC Venture Cup 2016 - Final Round (Div2) E
贪心.当前位置满油可达的gas station中,如果有比它小的,则加油至第一个比他小的.没有,则加满油,先到达这些station中最小的.注意数的范围即可. #include <iostrea ...
- JS获取地址栏并拼接參数
比方地址栏是这种:http://www.aa.com/detail.aspx?code=1&start=2014-12-01&end=2014-12-23&name=abc 要 ...
- Android自己主动提示文本框(AutoCompleteTextView)
自己主动提示文本框(AutoCompleteTextView)能够加强用户体验,缩短用户的输入时间(百度的搜索框就是这个效果). 首先.在xml中定义AutoCompleteTextView控件: a ...