首先是递归方法:
思路:首先定义两个指针,指向两字符串的索引0处,对两字符串从索引0处的值(字符型,charAt()方法)开始比较,如果相等,就将索引全部+1,并且返回值+1,即记此处有一个相同的字符。如果不相等,则有两个方向,分别是一个指针动,另一个指针不动。最终递归的出口是任意指针指向字符串末尾。则表示字符串遍历结束,返回0。
首先确定递归出口:如果任意指针指向字符串末尾。则表示字符串遍历结束,返回0。
递归条件:如果两指针指向位置的字符值相等,则指针全部+1,对后面的字符串继续比较。
如果指针处的值不相等,则有两个选择,分别是保持一个指针不动,另一个指针+1,并返回这两个方向中的最大值。(例如:字符串1:“abdca”;字符串2:“bbacd”;当指针都指向0时,比较0位置处的字符是否相等('a' != 'b'),所以两个方向分别可以理解成 “abdca” 与 “bacd” 比较和 ”bdca” 与 “bbacd”相比较,取其中的最大值。然后继续向下递归。)
import java.util.*; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ String str1 = sc.nextLine(); String str2 = sc.nextLine(); //获取两个字符串 System.out.println(helper(str1,str2,0,0)); } } public static int helper(String str1, String str2,int start1,int start2){ if(start1 == str1.length()||start2 == str2.length()) return 0; //递归出口:当两个指针其中一个指到其字符串的末尾是,表示后面没有数据,返回0 if(str1.charAt(start1) == str2.charAt(start2)) return helper(str1,str2,start1+1,start2+1)+1; //如果两指针所指向位置处的值相等,证明该处字符相等,则两指针都向后移一位,并且返回值+1表示该处字符相等,所以计数+1。 else{ return Math.max(helper(str1,str2,start1+1,start2),helper(str1,str2,start1,start2+1)); //如果值不相等,则分为两种情况,一种是字符串1指针向后一位,字符串2指针不动,另一种相反,所有情况都会包含在里面。 } } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)