输出最长不重复子串

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/flower_CSDN/article/details/81980169

剑指offer中的题,p237,看不懂书上的,就自己写了

package test;
/**
 * 输出最长不重复子串
 * 假设字符串中只包含'a'~'z'的字符。例如,在字符串
 * "arabcacfr"中,最长的不含重复的子字符串是"acfr",长度为4。
 * @author 17976
 *
 */
public class LongString {

    public static String longStr(String str) {
        int maxLength=0;

        char[] chs=str.toCharArray();
        String resStr="";
        char[] rs=new char[str.length()];

        for(int i=0;i<str.length();i++) {
            if(i==0) {
                resStr+=chs[i];
            }
            else {
                if(resStr.contains(chs[i]+"")) {
                    for(int j=0;j<resStr.length();j++) {
                        if(chs[i]==resStr.charAt(j)) {
                            int d=i-j;//当前不重复子串的长度
                            if(d>=maxLength) {
                                maxLength=d;
                                resStr+=chs[i];
//                              System.out.println("i"+i+"j:"+j+resStr+"   "+resStr.length());
                                resStr=resStr.substring(j+1, resStr.length());
                                break;//如果不加break会一直循环,因为length被改变了
                            }

                        }
                    }
                }
                else {
                    resStr+=chs[i];
                    maxLength++;
                }
            }
        }

        return resStr;
    }

    public static void main(String[] args) {
        String res=longStr("arabcacfr");
        System.out.println(res+"---"+res.length());

        //substring的beginindex是从0开始,左闭右开的
//      System.out.println("arabcacfr".substring(0, 2));



    }
}

猜你喜欢

转载自blog.csdn.net/flower_CSDN/article/details/81980169