求最长递增子串

最近看到一个Java笔试题:求最长递增子串
    题目:给定一个只包含小写字母(a-z)的字符串。找出其中最长递增子串(子串是指连续的子串)。
    例如:给定ababc输出abc
 public static void main(String [] args){
        String str="abcefghjklmn";
        System.out.println("str:"+getMaxSubStr(str));
    }

    static String s="";    //标记最长子串
    public static String getMaxSubStr(String str){
        String s="";    //标记最长子串
        return getStr(str,0,0,1);
    }

    /**
     *
     * @param str       待查找字符串
     * @param start     标记子串初始位置
     * @param sf        标记两字符比较的第一个字符
     * @param end       标记两字符比较的第二个字符
     * @return          返回最长字符串
     */
    public static String getStr(String str,int start,int sf,int end){
        if (str.length()<2){
            return str;
        }
        String s1="";   //标记当前子串
        if (str.charAt(end)-str.charAt(sf)==1){//当前子串递增
            sf++;
            end++;
            if (end<=str.length()-1){
                return getStr(str,start,sf,end);
            }else {
                s1=str.substring(start,end);
                System.out.print("s1:"+s1);
                System.out.println("  s:"+s);
                if (s1.length()>s.length()){//当前子串长度大于最大子串长度
                    s=s1;
                }
                return s;
            }
        }else {
            s1=str.substring(start,end);
            System.out.print("s1:"+s1);
            System.out.println("   s:"+s);
            if (s1.length()>s.length()){//当前子串长度大于最大子串长度
                s=s1;
            }
            if (end==str.length()-1){
                return s;
            }else {
                return getStr(str,end,end,end+1);
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值