題目鏈結
dp。設last[i][j]是第i個串字元'j'所在的最後的位置,f[i][j][k]是第乙個串匹配到i,第二個串匹配到j,第三個串匹配到k,最多的公共子串數。
那麼我們三重迴圈i、j、k,每次更新last陣列的值。
然後在三重迴圈內部再加一重迴圈從'a'到'z',列舉公共子串的最後乙個字元是什麼。
然後在last裡面找到這三個字元最後出現在什麼位置,記為nms。
於是f[i][j][k]=f[n-1][m-1][s-1]+1。
最後輸出答案即可。
#include#include#include
#include
#include
inline
long
long
read()
while
(isdigit(ch))
return num*f;
}long
long f[105][105][105
];char a[1020],b[1020],c[1020
];int
x,y,z;
int last[5][200
];int
main()}}
}printf(
"%lld
",f[x][y][z]);
return0;
}
求公共子串行和公共子串
輸入 第一行給出乙個整數n 0最長公共子串行長度。每組結果佔一行。樣例輸入 2asdf adfsd 123abc abc123abc 樣例輸出36 輸入兩個字串,輸出它們的最長子字串。求公共子串以及求公共子串的長度 include include define n 100 char a n b n ...
找公共子串
in asdff fffasdfffaaaf out 5 尋找公共子串,我的思想就是兩層迴圈,最短每層的乙個i開始最大與長的字串的共同子串,遍歷,暴力搜尋。注意大小寫,和注意思路就好 只有280分,如果有優化 請多多指教 如下,include include include using namesp...
D 子串查詢
度度熊的字串課堂開始了!要以像度度熊一樣的天才為目標,努力奮鬥哦!為了檢驗你是否具備不聽課的資質,度度熊準備了乙個只包含大寫英文本母的字串 a 1,n a1a2 ana 1,n a1a2 an,接下來他會向你提出 qq 個問題 l,r l,r 你需要回答字串 a l,r alal 1 ara l,r...