有n個長為m+1的字串,如果某個字串的最後m個字元與某個字串的前m個字元匹配,
則兩個字串可以聯接,問這n個字串最多可以連成乙個多長的字串,如果出現迴圈,則返回錯誤。
思路 :分析一下,將各個字串作為乙個節點,首尾鏈結就好比是一條邊,將兩個節點連線起來,於是問題就變
成乙個有關圖的路徑長度的問題。鏈結所得的字串最長長度即為從圖的某個節點出發所能得到的最長路
徑問題,與最短路徑類似,可以應用弗洛伊德演算法求解。對於迴圈,即可認為各個節點通過其他節點又回
到自己,反應在路徑長度上,就表示某個節點到自己節點的路徑大於零(注:初始化個節點到自己的長度為零)。
[cpp]view plain
copy
#include
#include
using
namespace
std;
#define length 14
bool
isconnect(string str1,string str2)
return
true
; }
void
maxstring(string str)
; for
(int
i=0;i
for(
intj=0;j
if(isconnect(str[i],str[j]))
g[i][j]=1;
for(
inti=0;i
for(
intj=0;j
for(
intk=0;k
} for(
inti=0;i
if(g[i][i]>1)
intmax=0;
for(
inti=0;i
for(
intj=0;j
cout<<"max length is "
<
} int
main()
; maxstring(str);
}
如果在text字串陣列中再加乙個"babc",就將形成環路,導致一些節點自身的路徑非零,環路檢測會報告出錯。
37 最長字串鏈結
有n個長為m 1的字串,如果某個字串的最後m個字元與某個字串的前m個字元匹配,則兩個字串可以聯接,問這n個字串最多可以連成乙個多長的字串,如果出現迴圈,則返回錯誤。成乙個有關圖的路徑長度的問題。鏈結所得的字串最長長度即為從圖的某個節點出發所能得到的最長路 徑問題,與最短路徑類似,可以應用弗洛伊德演算...
37 最長字串鏈結
37.有n長為 m 1 的字串,如果某個字串的最後 m 個字元與某個字串的前 m 個字元匹配,則兩個字串可以聯接,問這 n個字串最多可以連成乙個多長的字串,如果出現迴圈,則返回錯誤。將各個字串作為乙個節點,首尾鏈結就好比是一條邊,將兩個節點連線起來,於是問題就變成乙個有關圖的路徑長度的問題。鏈結所得...
最長對稱字串
對給定的字串,本題要求你輸出最長對稱子串的長度。例如,給定 is pat tap symmetric?最長對稱子串為 s pat tap s 於是你應該輸出11。輸入格式 輸入在一行中給出長度不超過1000的非空字串。輸出格式 在一行中輸出最長對稱子串的長度。輸入樣例 is pat tap symm...