蓝桥杯java第八届第六题--最大公共子串
生活随笔
收集整理的這篇文章主要介紹了
蓝桥杯java第八届第六题--最大公共子串
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
標題:最大公共子串最大公共子串長度問題就是:
求兩個串的所有子串中能夠匹配上的最大長度是多少。比如:"abcdkkk" 和 "baabcdadabc",
可以找到的最長的公共子串是"abcd",所以最大公共子串長度為4。下面的程序是采用矩陣法進行求解的,這對串的規模不大的情況還是比較有效的解法。請分析該解法的思路,并補全劃線部分缺失的代碼。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);}
}注意:只提交缺少的代碼,不要提交已有的代碼和符號。也不要提交說明性文字。
**解析:**這個題目其實是很多時候都能看到的,數據結構里面好像都有講過,這里其實只要將這兩個字符串都減一的情況下,本身的公共數加一就可以,但是我認為這個題目解法都很多種。
解法一:a[i-1][j-1]+1
解法二:f(s1.subString(i),s2.subString(j))+1
我當時做的就是第二種,我就覺得只要每次遞歸的時候字符串減一,然后回溯的時候加一就可以了。
如果有什么問題,歡迎指正。。
總結
以上是生活随笔為你收集整理的蓝桥杯java第八届第六题--最大公共子串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝桥杯java第八届第五题--取数位
- 下一篇: 蓝桥杯java第八届第三题--承压计算