1. 程式人生 > >LeetCode 第3題:給定一個字串,找出不含有重複字元的最長子串的長度。

LeetCode 第3題:給定一個字串,找出不含有重複字元的最長子串的長度。

public class LeetCode3 {
       public static void main(String[] args) {
        /**
         * LeetCode第3題:
         * 給定一個字串,找出不含有重複字元的最長子串的長度。
         * 示例:給定 "abcabcbb" ,沒有重複字元的最長子串是 "abc" ,那麼長度就是3。
         * 解題思路:建立指標i,j,i=0,j=i+1;最大字元長度為max
         * if str[i-(j-1)]的區間中存在 = str[j] , i++;j=i+1;break;
         * else j++;
         * 執行時間 n的2次方
         */
           String s = "pwwkew";
           System.out.println(lengthOfLongestSubstring(s));
    }
       
       public static int lengthOfLongestSubstring(String s) {
           if(s.length() == 1) return 1;
           if(s.length() == 0) return 0;
           char str[] = s.toCharArray(); 
           int i = 0,j = i+1,max = 0;
           boolean  t = true;
           while(i < s.length() - 1){
                   int length = 1;
                   //檢測是否重複
                   if(j == s.length()) break;
                   for(int k = i; k < j;k++){
                       if(str[j] != str[k] ){
                           length++;
                           }else{
                               t = false;
                                break;
                           }
                   }
                   if(length > max){
                       max = length; 
                   }
                   //如果檢測成功,j指標右移一次
                   if(t) j++;
                   //檢測失敗,i指標右移一次,j指標回到i+1的位置
                   else{
                       t = true; i++; j = i + 1; length = 1;
                   }
           }
           return max;
       }
}