蓝桥杯java第八届第六题--最大公共子串
生活随笔
收集整理的這篇文章主要介紹了
蓝桥杯java第八届第六题--最大公共子串
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
標(biāo)題:最大公共子串最大公共子串長(zhǎng)度問(wèn)題就是:
求兩個(gè)串的所有子串中能夠匹配上的最大長(zhǎng)度是多少。比如:"abcdkkk" 和 "baabcdadabc",
可以找到的最長(zhǎng)的公共子串是"abcd",所以最大公共子串長(zhǎng)度為4。下面的程序是采用矩陣法進(jìn)行求解的,這對(duì)串的規(guī)模不大的情況還是比較有效的解法。請(qǐng)分析該解法的思路,并補(bǔ)全劃線部分缺失的代碼。public class Main
{static int f(String s1, String s2){char[] c1 = s1.toCharArray();char[] c2 = s2.toCharArray();int[][] a = new int[c1.length+1][c2.length+1];int max = 0;for(int i=1; i<a.length; i++){for(int j=1; j<a[i].length; j++){if(c1[i-1]==c2[j-1]) {a[i][j] = __________________; //填空if(a[i][j] > max) max = a[i][j];}}}return max;}public static void main(String[] args){int n = f("abcdkkk", "baabcdadabc");System.out.println(n);}
}注意:只提交缺少的代碼,不要提交已有的代碼和符號(hào)。也不要提交說(shuō)明性文字。
**解析:**這個(gè)題目其實(shí)是很多時(shí)候都能看到的,數(shù)據(jù)結(jié)構(gòu)里面好像都有講過(guò),這里其實(shí)只要將這兩個(gè)字符串都減一的情況下,本身的公共數(shù)加一就可以,但是我認(rèn)為這個(gè)題目解法都很多種。
解法一:a[i-1][j-1]+1
解法二:f(s1.subString(i),s2.subString(j))+1
我當(dāng)時(shí)做的就是第二種,我就覺(jué)得只要每次遞歸的時(shí)候字符串減一,然后回溯的時(shí)候加一就可以了。
如果有什么問(wèn)題,歡迎指正。。
總結(jié)
以上是生活随笔為你收集整理的蓝桥杯java第八届第六题--最大公共子串的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 蓝桥杯java第八届第五题--取数位
- 下一篇: 蓝桥杯java第八届第三题--承压计算