hihocoder 1032
Posted 计算机科学家的世界
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hihocoder 1032相关的知识,希望对你有一定的参考价值。
题目链接:http://hihocoder.com/problemset/problem/1032
时间限制: 1000ms 单点时限: 1000ms 内存限制: 64MB-
3 abababa aaaabaa acacdas
样例输出
-
7 5 3
描述
小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进。
这一天,他们遇到了一连串的字符串,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能分别在这些字符串中找到它们每一个的最长回文子串呢?”
小Ho奇怪的问道:“什么叫做最长回文子串呢?”
小Hi回答道:“一个字符串中连续的一段就是这个字符串的子串,而回文串指的是12421这种从前往后读和从后往前读一模一样的字符串,所以最长回文子串的意思就是这个字符串中最长的身为回文串的子串啦~”
小Ho道:“原来如此!那么我该怎么得到这些字符串呢?我又应该怎么告诉你我所计算出的最长回文子串呢?
小Hi笑着说道:“这个很容易啦,你只需要写一个程序,先从标准输入读取一个整数N(N<=30),代表我给你的字符串的个数,然后接下来的就是我要给你的那N个字符串(字符串长度<=10^6)啦。而你要告诉我你的答案的话,只要将你计算出的最长回文子串的长度按照我给你的顺序依次输出到标准输出就可以了!你看这就是一个例子。”
提示一 提示二 提示三 提示四 样例输入代码:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int FetchMaxPalindromicLen(const string& s)//O(n)
string str;
str.push_back('#');
for(int i= 0; i< s.length(); ++i)
str.push_back(s[i]);
str.push_back('#');
vector<int> len(str.length());
int mx;
int id;
id= -1;
mx= 0;
len[0]= 1;
for(int i= 1; i< len.size(); ++i)
if(mx> i)
len[i]= min(len[2*id-i],mx-i);
else
len[i]= 1;
while(i+len[i]< len.size()&&i-len[i]>= 0&&str[i+len[i]]==str[i-len[i]])
++len[i];
if(i+len[i]> mx)
mx= i+len[i];
id= i;
return (*max_element(len.begin(),len.end()))-1;
int main()
string s;
int n;
cin>>n;
while(n--)
cin>>s;
cout<<FetchMaxPalindromicLen(s)<<endl;
结果:
编号 | 题目 | 结果 | 语言 | 时间 | 内存 | 提交时间 | 操作 |
1032 | 最长回文子串 | AC | G++ | 549ms | 19MB | 2分钟前 | 查看 |
以上是关于hihocoder 1032的主要内容,如果未能解决你的问题,请参考以下文章