求一個字符串中連續不重複的最長子字符串。

如題,求的是不重複的最長子字符串,分析如下:

1:字符串需要遍歷

2:出現重複字符時,需要重新遍歷。

3:每次重新遍歷需要去掉首位字符

 

ok,通過上述分析,選擇使用遞歸方式進行解題,代碼如下:

public class getLongestSubstr {

    private static String longerStr = "";
    private static int maxLonger = 0;

    public static void getLonger(String target) {
        if(target == null || target.length() == 0) {
            return;
        }
        // 結束遞歸標識
        boolean out = false;
        StringBuffer sb = new StringBuffer();
        for(int i=0; i<target.length();i++) {
            String chat = target.charAt(i) + "";
            if(!sb.toString().contains(chat)) {
                sb.append(chat);
                //判斷是否已經遍歷完整個字符串
                if(i == target.length() -1) {
                    longerStr = sb.toString();
                    maxLonger = sb.length();
                    out = true;
                }
            } else {
                if(maxLonger < sb.length() ) {
                    longerStr = sb.toString();
                    maxLonger = sb.length();
                }
                // 每次遞歸去掉首字母
                target = target.substring(1);
                // 不可能獲得更長的子字符串了
                if(maxLonger == target.length()) {
                    out = true;
                }
                break;
            }
        }
        if(!out) {
            getLonger(target);
        }
    }

    public static void main(String[] args) {
        getLonger("abcdekkkkkkkkqwertyuiopkjg");
        System.out.println(longerStr);
    }
}

爲了方便理解,沒有對代碼進行多餘加工,如果有興趣,試試自己修改成更加適合使用的工具類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章