亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

夕拾算法進階篇:16)最長回文子串(動態規劃DP)

2019-11-10 20:14:09
字體:
來源:轉載
供稿:網友

給出一個字符串S,求S的最長回文子串的長度。

樣例:字符串“PATZJUJZTACCBCC”的回文子串為“ATZJUJZTA”,長度為9。

如果使用暴力解法,枚舉子串的兩個端點i和j,時間復雜度需要O(n^2)。判斷子串是否為回文需要O(n),總體時間復雜度為O(n^3),使用動態規劃可以達到最優的O(n^3),而使用動態規劃解決最長回文子串的方法有很多種,下面討論最簡單的一種方法。

令dp[i][j]表示S[i]至S[j]所表示的子串是否為回文子串,是則為1,不是為0。如此根據S[i]是否等于S[j],可以把問題分為兩類:

(1)S[i]==S[j],那么只要S[i+1]至S[j-1]是回文子串,S[i]至S[j]就是回文子串;如果S[i+1]至S[j-1]是不是回文子串,則S[i]至S[j]也不是回文子串。

(2)S[i]!=S[j],那么S[i]至S[j]一定不是回文子串。  

由此可以 寫出其狀態轉移方程:

邊界:dp[i][i]=1,dp[i][i+1]=(S[i]==S[i+1]?0:1)       ps:這里的dp初始化記錄了長度為1和2的回文子串

但是這里還存在一個問題,就是在求dp[i][j]時,無法保證dp[i+1][j-1]已經被計算了,比如先固定i=0,然后j從2開始枚舉。當求解dp[0][2]時,的dp[1][1]已經在初始中得到;當求解dp[0][3]時,會轉換求dp[1][2],而dp[1][2]也在初始化是獲得了;當求解dp[0][4]是,轉換求解dp[1][3],但dp[1][3]之前卻沒有被計算出來,因此無法轉移狀態。

根據上面的公式,邊界的長度表示長度為1和2的回文子串,且每次轉移時都說對子串的長度減1。因此不妨按照子串的長度和子串的初始位置進行枚舉,即第一次可以枚舉長度為3的子串的dp值,第二次在第一次的基礎上枚舉長度為4的子串的dp值....直到枚舉到原字符串的長度。長度為3的示意圖如下:

根據上面的分析,可以給出下面的代碼:

#include <iostream>#include <string>#include <algorithm>using namespace std; const int M=1010;int dp[M][M];  int main(){	int i,j,k,s,e,ans=1; 	string str;	cin>>str;	int len=str.length();	for(i=0;i<len;i++){		dp[i][i]=1;		if(str[i]==str[i+1]){			dp[i][i+1]=1;			ans=2;		}	}	for(k=3;k<=len;k++){ //子串的長度 		for(i=0;i+k-1<len;i++){ //子串左端點 			j=i+k-1; //子串右端點			if(str[i]==str[j]&&dp[i+1][j-1]){				dp[i][j]=1;				ans=k;				s=i;e=j; //保存最長回文子串的下標			}		} 	}	for(i=s;i<=e;i++){		cout<<str[i]; 	}	cout<<endl<<ans<<endl;	}下面具體看一個題目:

題目描述        輸入一個字符串,求出其中最長的回文子串。子串的含義是:在原串中連續出現的字符串片段?;匚牡暮x是:正著看和倒著看相同。如abba和yyxyy。在判斷回文時,應該忽略所有標點符號和空格,且忽略大小寫,但輸出應保持原樣(在回文串的首部和尾部不要輸出多余字符)。輸入字符串長度不超過5000,且占據單獨的一行。應該輸出最長的回文串,如果有多個,輸出起始位置最靠左的。輸入一行字符串,字符串長度不超過5000。輸出字符串中的最長回文子串。樣例輸入Confuciuss say:Madam,I'm Adam.樣例輸出Madam,I'm Adam

這個題目完全可以使用上面的思路來求解,需要注意的是:上面的方法是求最右端的子串,而題目要求是最左端的子串。解決方法也很容易,從字符串的末端開始枚舉即可:

#include <cstdio>#include <cstring>using namespace std; const int M=5002;int dp[M][M];  int pos[M]; //保存新位置到原位置的映射 bool isAlptha(char c){	return 'a'<=c && c<='z' || 'A'<=c && c<='Z';}bool isDigit(char c){	return '0'<=c && c<='9'; }char* toUpper(char* v){	for(int i=0;v[i];i++){		if('a'<=v[i] && v[i]<='z'){			v[i]-=32; 		}	}	return v;}int main(){	int i,j,k,s,e,ans=1,c=0; 	char* str1=new char[M];	char* str=new char[M];	gets(str1);	for(i=0;str1[i];i++){		if(isAlptha(str1[i])||isDigit(str1[i])){			str[c]=str1[i];			pos[c++]=i; //保存新位置到原位置的映射 		}	}	str=toUpper(str);	int len=strlen(str);	for(i=0;i<len;i++){		dp[i][i]=1;		if(str[i]==str[i+1]){			dp[i][i+1]=1;			ans=2;		}	}	for(k=3;k<=len;k++){ //子串的長度 		for(j=len-1;j-k+1>=0;j--){ 	//子串右端點			i=j-k+1;  //子串左端點 			if(str[i]==str[j]&&dp[i+1][j-1]){				dp[i][j]=1;				ans=k;				s=i;e=j;			}		}	} 	s=pos[s]; e=pos[e]; 	for(i=s;i<=e;i++){		PRintf("%c",str1[i]); 	}	printf("/n");}

題目來源:http://www.codeup.cn/problem.php?cid=100000629&pid=0


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97av在线视频| 国产精品福利小视频| 国产精品色悠悠| 国产亚洲精品美女久久久| 亚洲成色777777女色窝| 欧美日韩亚洲国产一区| 久久精品欧美视频| 精品无人区乱码1区2区3区在线| 亚洲第一网站男人都懂| 日韩欧美在线视频免费观看| 国产a∨精品一区二区三区不卡| 97在线视频一区| 精品国产精品自拍| 黄网动漫久久久| 久久69精品久久久久久国产越南| 国产日韩精品一区二区| 亚洲国产一区二区三区四区| 成人a免费视频| 亚洲人成网站免费播放| 国产精品欧美风情| 国语自产精品视频在线看| 日韩一区二区三区国产| 国产精品久久久久久久app| 精品国产一区二区三区久久久| 亚洲国产成人爱av在线播放| 欧洲中文字幕国产精品| 国产精品青草久久久久福利99| 欧美激情第99页| 亚洲欧美国产精品| 亚洲片国产一区一级在线观看| 欧美午夜丰满在线18影院| 国产精品三级美女白浆呻吟| 日韩www在线| 欧美另类极品videosbest最新版本| 4438全国亚洲精品在线观看视频| 永久免费毛片在线播放不卡| 亚洲视频在线观看| 日韩大陆毛片av| 91免费在线视频网站| 亚洲第一av网站| 亚洲一区精品电影| 精品国产91乱高清在线观看| 久久综合久久美利坚合众国| 日韩av色综合| 日韩视频免费在线| 久久久国产一区二区三区| 久久欧美在线电影| 欧美做受高潮1| 国产精品一香蕉国产线看观看| 亚洲性xxxx| 欧美极度另类性三渗透| 欧美成人性生活| 日韩在线视频播放| 中文字幕亚洲综合| 久久国产精品久久国产精品| 国产精品海角社区在线观看| 九九久久精品一区| 欧美天天综合色影久久精品| 欧美视频中文字幕在线| 日韩精品一区二区三区第95| 国产精品99久久久久久人| 国产精品永久免费视频| 亚洲国产成人精品女人久久久| 日韩av一区在线观看| 亚洲激情 国产| 欧美日韩国产专区| 日韩欧美在线免费| 性夜试看影院91社区| 欧美日韩亚洲一区二区三区| 日韩一区二区三区xxxx| 亚洲精品aⅴ中文字幕乱码| 日韩电影大全免费观看2023年上| 一区二区三区www| 欧洲日本亚洲国产区| 久久这里只有精品99| 亚洲国产精品系列| 亚洲自拍偷拍在线| 国产亚洲激情视频在线| 成人黄色影片在线| 日韩视频亚洲视频| 欧美老妇交乱视频| 亚洲成色777777女色窝| 国产精品第8页| 91在线免费网站| 日韩在线不卡视频| 亚洲精品国产福利| 久久久久久成人精品| 国产网站欧美日韩免费精品在线观看| 日本精品中文字幕| 成人国产亚洲精品a区天堂华泰| 国产欧美一区二区三区四区| 国产精品一区二区av影院萌芽| 国产精品一区二区3区| 亚洲在线观看视频| 欧美精品videosex极品1| 欧美在线免费观看| 亚洲三级 欧美三级| 欧美福利视频网站| 欧美高清一级大片| 4444欧美成人kkkk| 国产精品video| 欧美黑人性生活视频| 国产精品久久久久久久久久久久久| 38少妇精品导航| 久久久午夜视频| 精品国偷自产在线视频99| 亚洲白拍色综合图区| 久久影院资源网| 色香阁99久久精品久久久| 国产色综合天天综合网| 麻豆乱码国产一区二区三区| 91成人在线播放| 久久精品在线播放| 亚洲国产精品成人va在线观看| 亚洲一区二区三区在线视频| 91精品国产亚洲| 成人网址在线观看| 日韩成人av网址| 日本不卡免费高清视频| 国产亚洲免费的视频看| 久久久久久亚洲精品| 亚洲国产一区自拍| 九九综合九九综合| 亚洲一区二区在线播放| 久久久久久中文| 国产高清在线不卡| 国产欧美一区二区白浆黑人| 国产精选久久久久久| 日韩一区av在线| 日本高清视频精品| 一区二区在线视频播放| 狠狠色狠色综合曰曰| 中文字幕精品久久| 国产成人av在线播放| 久久久久久久久久久91| 国产福利精品在线| 欧美极品少妇xxxxx| 亚洲va男人天堂| 日韩av成人在线观看| 亚洲国产另类 国产精品国产免费| 国产精品久久久久久久久免费| 国产成人avxxxxx在线看| 国产suv精品一区二区| 亚洲欧美精品一区二区| 精品国产视频在线| 国产精品一区二区久久精品| 国产色视频一区| 国产日韩欧美在线看| 国内精品美女av在线播放| 亚洲第一精品自拍| 国产日韩欧美夫妻视频在线观看| 欧美性猛交99久久久久99按摩| 欧美午夜性色大片在线观看| 尤物yw午夜国产精品视频| 日韩欧美在线观看| 久久久久久亚洲精品| 国产美女久久精品香蕉69| 91九色精品视频| 久久精品视频在线观看| 91亚洲国产成人精品性色| 国产亚洲日本欧美韩国| 成人精品aaaa网站| 欧美丰满少妇xxxxx做受| 久久777国产线看观看精品|