1. 程式人生 > >51nod-【hihocoder #1032 : 最長迴文子串】

51nod-【hihocoder #1032 : 最長迴文子串】

<span style="font-size:18px;">
</span>
<span style="font-size:18px;">include<cstdio>
#include<cstring>
char str[3000000],s[3000000];
int p[3000000];
int min(int a,int b)
{
	if(a<b)
		return a;
	return b; 
} 
int max(int a,int b)
{
	if(a>b)
		return a;
	return b; 
} 
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		memset(p,0,sizeof(p));
		memset(s,'\0',sizeof(s)); 
		scanf("%s",str);
		int len=strlen(str),i;
		for(i=len;i>=1;--i)
		{
			s[i*2+1]='#';
			s[i*2]=str[i-1]; 
		} 
		s[0]='@';s[1]='#';
		int mx=0,mi=0,ans=0;
		len=strlen(s);
		p[0]=1; 
		for(i=1;i<len;++i)
		{
			if(i<mx)
				p[i]=min(p[2*mi-i],mx-i);
			else
				p[i]=1;
			while(s[i+p[i]]==s[i-p[i]])
				p[i]+=1;
			if(mx<p[i]+i)
			{
				mx=p[i]+i;
				mi=i;
			} 
			ans=max(ans,p[i]-1); 
		} 
		printf("%d\n",ans); 
	}
	return 0; 
}</span>

相關推薦

51nod-hihocoder #1032 :

<span style="font-size:18px;"> </span><span style="font-size:18px;">include<cst

hihocoder #1032 :

時間限制:1000ms 單點時限:1000ms 記憶體限制:64MB 描述    小Hi和小Ho是一對好朋友,出生在資訊化社會的他們對程式設計產生了莫大的興趣,他們約定好互相幫助,在程式設計的

hihocoder 1032 (Manacher演算法 詳解+模板)

時間限制:1000ms 單點時限:1000ms 記憶體限制:64MB 描述    小Hi和小Ho是一對好朋友,出生在資訊化社會的他們對程式設計產生了莫大的興趣,他們約定好互相幫助,在程式設計的

hdu3068 hihocoder 1032 馬拉車演算法

#include<bits/stdc++.h> using namespace std; const int maxn=1e6+10; char s1[maxn],s2[2*maxn];int p[2*maxn]; void gets2() { int len=

HiHo #1032 : Manacher演算法

#1032 : 最長迴文子串 時間限制:1000ms 單點時限:1000ms 記憶體限制:64MB 描述    小Hi和小Ho是一對好朋友,出生在資訊化社會的他們對程式設計產生了莫

hiho一下第一週#1032 :

一個字串中連續的一段就是這個字串的子串,而回文串指的是12421這種從前往後讀和從後往前讀一模一樣的字串,所以最長迴文子串的意思就是這個字串中最長的身為迴文串的子串 思路1 以字串中的每個字元為中心,向左右兩邊尋找,直到找到最長的迴文子串

HiHo 1032 (Manacher演算法求解)

Manacher演算法o(n)求解最長迴文子串問題 非常巧妙 #include<bits/stdc++.h> using namespace std; char str[2000020],s[2000020]; int p[2000020]; int len,

HDU - 3068(Manacher演算法,馬拉車演算法求

題幹: 給出一個只由小寫英文字元a,b,c...y,z組成的字串S,求S中最長迴文串的長度.  迴文就是正反讀都是一樣的字串,如aba, abba等 Input 輸入有多組case,不超過120組,每組輸入為一行小寫英文字元a,b,c...y,z組成的字串S  兩

探索-中級演算法

這一題可以參考:647. 迴文子串 本質上是一樣的,要判斷出所有的迴文字串,然後找到其中最長的那一個。 中心擴充套件法 中心擴充套件就是把給定的字串的每一個字母當做中心,向兩邊擴充套件,這樣來找最長的子迴文串。演算法複雜度為O(N^2) public Stri

LeetCode 中等題3-

宣告: 今天是中等題第3道題。給定一個字串 s,找到 s 中最長的迴文子串。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除 (手動比心ღ( ´・ᴗ・` ))

LeetCode#5(Longest Palindromic Substring)

【LeetCode】#5最長迴文子串(Longest Palindromic Substring) 題目描述 給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為 1000。 示例 示例 1: 輸入: “babad” 輸出: “bab” 注意: “a

22562 Problem A 字串

問題 A: 【字串】最長迴文子串 時間限制: 1 Sec  記憶體限制: 128 MB 提交: 114  解決: 56 [提交][狀態][討論版][命題人:外部匯入] 題目描述   &nb

leetcode5.

我們就可以在 O(n^2)O(n2) 的時間內解決這個問題。 我們觀察到迴文中心的兩側互為映象。因此,迴文可以從它的中心展開,並且只有 (2n - 1 )個這樣的中心。 你可能會問,為什麼會是 2n

序列hihocoder1032 C++

問題描述 Time Limit:1000ms Case Time Limit:1000ms Memory Limit:256MB 小Hi和小Ho是一對好朋友,出生在資訊化社會的他們對程式設計產生了莫大的興趣,他們約定好互相幫助,在程式設計的學習道路上一同前進。

51Nod 1088 ——————Manacher,馬拉車演算法

基準時間限制:1 秒 空間限制:131072 KB 分值: 0 難度:基礎題 迴文串是指&ThickSpace;aba、abba、cccbccc、aaaa\;aba、abba、cccbccc、aaaaaba、abba、cccbccc、aaaa這種左

51nod 1088

題目 解題思路:用暴力的方式,定義兩個標記i,j,i從字串的左邊開始往右指,j從字串的右邊開始往左指。取中間的字串儲存到另一個字元陣列中,每儲存完一個字串,則進行迴文字串的判斷。 迴文字串的判斷如下: 從字串的開頭遍歷到字串的一半,判斷前半部分和後半部分的字元是否相同,

Manacher模板HDU 3068——求

直接做會超時,需要優化,網上通行的演算法是manacher演算法(具體原理還不是很明白),這裡可以當模板使。 // 原串最大長度N // 返回最大回文字串 res #include<cstdio> #include<cstring> #includ

LeetcodePython實現

動態規劃實現 根據迴文的特性,一個大回文按比例縮小後的字串也必定是迴文,比如ABCCBA,那BCCB肯定也是迴文。所以我們可以根據動態規劃的兩個特點: (1)把大問題拆解為小問題 (2)重複利用之

LeetCode5#

題目描述 給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為 1000。 示例 1: 輸入: "babad" 輸出: "bab" 注意: "aba" 也是一個有效答案。 示例 2: 輸入: "cbbd" 輸出: "bb" 思路 本題運用了一些動態規劃的思想,關於動態規

動態規劃公共

題目 : 給定兩個字串,求出它們之間連續的最長的相同子字串的長度。 eg : fbaabe,ebaabf,連續最長子串長度為4。 注意:求最長迴文子串也可以用求最長公共子串來求,只需將字串反轉作為另外一個字串,迴文部分反轉之後不變,然後求LCS(Longes