- public class Main {
- //求兩個串最長公共子序列的長度
- //abcdef abc abd bdf
- public static int f(String s1,String s2){
- if(s1.length()==0||s2.length()==0){
- return 0;
- }
- /**
- * 主體部分
- */
- if(s1.charAt(0)==s2.charAt(0)){ //如果頭相同
- return f(s1.substring(1),s2.substring(1))+1; //在交給下級的比較結果中加1
- }else{
- return Math.max(f(s1.substring(1),s2),f(s1,s2.substring(1))); //傳回:max的選擇執行,誰大執行誰
- //執行方式(降低規模!!!):誰大切誰,輪流切
- }
- /**
- * 主體邏輯:
- * 1.比較第一個,相同就加1繼續執行(過程)
- * 2.不同就去掉長的頭元素,繼續比較(變化)
- * 3.一直到有一方為0,傳回0種情況(出口)
- * @param args
- */
- public static void main(String[] args) {
- int k=f("fabcdk","xbacd");
- System.out.println(k);
- }
- }