有n 個長為m+1 的字串,如果某個字串的最後m 個字元與某個字串的前m 個字元匹配,則兩個字串可以聯接,問這n 個字串最多可以連成乙個多長的字串,如果出現迴圈,則返回錯誤。
分析一下,將各個字串作為乙個節點,首尾鏈結就好比是一條邊,將兩個節點連線起來,於是問題就變成乙個有關圖的路徑長度的問題。鏈結所得的字串最長長度即為從圖的某個節點出發所能得到的最長路徑問題,與最短路徑類似,可以應用弗洛伊德演算法求解。對於迴圈,即可認為各個節點通過其他節點又回到自己,反應在路徑長度上,就表示某個節點到自己節點的路徑大於零(注:初始化個節點到自己的長度為零)。
view plain
public
class
maxcatenate ;
maxcatenate(text);
} public
static
void
maxcatenate(string text)
for(intk=0
; kfor
(inti=0
; ifor
(intj=0
; jif
(g[i][k]!=
0&&g[k][j]!=
0)
} for(
inti=
0; i
if(g[i][i]>
1)
intmax =
0;
for(
inti=
0; i
for(
intj=
0; j
max = math.max(max, g[i][j]);
system.out.println("max length is "
+ (max+text[
0].length()));
} }
如果在text字串陣列中再加乙個"babc",就將形成環路,導致一些節點自身的路徑非零,環路檢測會報告出錯。
合併N個長度為M的有序陣列為乙個N M的有序陣列
題目 合併n個有序陣列,每個陣列的長度為m,合併為n m的有序陣列。時間複雜度要求最低 解法 n個陣列進行兩兩合併,合併後的陣列再繼續執行合併過程,最後合成n m的有序陣列。可以認為合併這個遞迴過程發生了logn次,每一次合併的過程都是n m個數合併,所以每一次合併的時間複雜度為n m,總的時間複雜...
拼接字串 Python中字串拼接的N 1種方法
python拼接字串一般有以下幾種方法 1.直接通過 操作符拼接 輸出結果 hello world 使用這種方式進行字串連線的操作效率低下,因為python中使用 拼接兩個字串時會生成乙個新的字串,生成新的字串就需要重新申請記憶體,當拼接字串較多時自然會影響效率。2.通過str.join 方法拼接 ...
js 操作字串的n個方法
js 關於操作字串的方法 1 想得到字串的長度有string.length屬性 2 想得到字串指定位置的字元string.charat int index 3 擷取想要的字串用substring str.substring i 上面這一種意思是 從起始位置i 包括i位置的字元 一直到字串的結尾進行擷...