最长回文子序列 递归算法

<pre name="code" class="html">public static void main(String[] args)
    {   
    	
//    	try {  
//            BufferedReader strin=new BufferedReader(new InputStreamReader(System.in));  
//            System.out.print("请输入一个字符串:");  
//            String str = strin.readLine();  
//              
//            System.out.println("第一个:"+str);  
//              
//            System.out.println("请输入第二个字符串:");  
//            String str2 = strin.readLine();  
//            System.out.println("第2个:"+str2);  
//        } catch (IOException e) {  
//            e.printStackTrace();  
//        }
    	
    	Scanner sc = new Scanner(System.in);   

        System.out.println("输入一个字符串:");  
//        System.out.println("输入字符串:"+sc.next());
        String str = sc.next();
        StringBuilder result = new StringBuilder();
        int length = GetHuiWen(result, str);
        System.out.println("result:" + result + " length:" + length);
    }
    public static int GetHuiWen(StringBuilder result, String src){
    	if (src == null || result == null) {
			return -1;
		}
    	int length = src.length();
    	if (length == 0) {		//若长度为0
			return 0;
		}
    	if (length == 1) {		//若长度为1,返回0,已与e099中99的情况区分开
			result.append(src.charAt(0));
			return 0;
		}
    	if (length == 2) {		//若长度为2,且为两个字符相等,返回1,即已e099中99这种情况
			if (src.charAt(0) == src.charAt(1)) {
				result.append(src.charAt(0));
				return 1;
			}
		}
//    	if (length == 3) {
//			if ((src.charAt(0) == src.charAt(1) && src.charAt(1) != src.charAt(2))
//					|| (src.charAt(2) == src.charAt(1) && src.charAt(1) != src.charAt(0))) {
//				result.append(src.charAt(1));
//				return 1;
//			}
//		}
    	if (src.charAt(0) == src.charAt(length - 1)) {		//若首尾字符相等,将首尾字符去掉,继续递归寻找回文
			result.append(src.charAt(0));
			GetHuiWen(result, src.substring(1, length - 1));
			return result.length();
		}
    	else {												//若首尾字符不相等,将首尾分别去掉一个字符,继续递归寻找回文
    		StringBuilder si = new StringBuilder();
    		StringBuilder sj = new StringBuilder();
			int i = GetHuiWen(si, src.substring(0, length - 1));	//得到回文长度,来选择最长的回文
			int j = GetHuiWen(sj, src.substring(1, length));
			result.append(i >= j ? si : sj);
			return i>=j ? i : j;							//返回i,j而不返回result.length()是为了传递长度值以区分e099时随分别是e和9,
		}													//但返回9时的长度是1,e时是0。
    	
    }



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值