Leecode刷題日記3-最長字串【Java】

1.題目描述

給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。

示例:

輸入: "abcabcbb"
輸出: 3 
解釋: 因爲無重複字符的最長子串是 "abc",所以其長度爲 3。

2.思路

遍歷字符串,並將遍歷到的字符串和之前的字符作爲一個臨時字串,如果遍歷到的新的字符被包含在這個臨時字串中,說明跟前面的重複了,那麼就丟掉臨時字串中重複字符及其左邊的部分。如示例中,當遍歷到 第二個‘a’時,與第一個字符也就是’a’重複,那麼丟掉’a’,並加上新加入的’a’,此時臨時串爲 “bca”,長度爲3,繼續往後,遍歷到’b’,丟掉第一個’b’,加入新的’b’,臨時字串變成cab,長度依然爲3,記錄過程中的最大長度即可,如此直到結束。時間複雜度爲0(n).

3.解法

  public int lengthOfLongestSubstring(String s) {
        if(s==null||s.length()<1)return 0;
        String tempfLongsetSubString = s.charAt(0)+""; //
	       String lastRembered = tempfLongsetSubString;
	        for(int i = 1 ; i < s.length();i++){
	        	char a = s.charAt(i);
	        	int beginIndex = tempfLongsetSubString.indexOf(a);
	        	if(beginIndex>-1) {
	        		tempfLongsetSubString = tempfLongsetSubString.substring(beginIndex+1);
	        	}
	        	tempfLongsetSubString+=a;
        		if(tempfLongsetSubString.length()>lastRembered.length()) {
        			lastRembered = tempfLongsetSubString;
        		}
	        }
	        return lastRembered.length();
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章