03.无重复字符的最长字串

题目:

我的解答:

 1 class Solution {
 2     public int lengthOfLongestSubstring(String s) {
 3         char[] ch = s.toCharArray();
 4         int result = 0;
 5         int i,j,k;
 6         for(i=0;i<ch.length;i++){
 7             for(j=i+1;j<ch.length;j++){
 8                 for(k=i;k<j;k++){
 9                     if(ch[k]==ch[j]){
10                     break;
11                     } 
12                 }
13                if(k!=j) break;  
14             }
15             if(result<j-i){
16                 result =j-i;   
17             } 
18         }
19         return result;
20     }
21 }

缺点:耗时长 112ms、多层嵌套循环

改进01:

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int maxLength = 0;
        char[] chars = s.toCharArray();
        int leftIndex = 0;
      
        for(int i=0;i<chars.length;i++){
            for(int innerIndex= leftIndex;innerIndex<i;innerIndex++){
              if(chars[innerIndex]== chars[i]){
                  maxLength = Math.max(maxLength,i-leftIndex);
                  leftIndex = innerIndex + 1;
                  break;
              } 
            }
        }
        return Math.max(chars.length - leftIndex,maxLength);
    }
}

借鉴别人的代码:耗时 7ms 

改进02:

class Solution {
    public int lengthOfLongestSubstring(String s) {
        if(s.equals("")||s.equals(null)){
            return 0;
        }
        char[] ch = s.toCharArray();
        int baseIndex = 0;
        int maxLength = 0;
        int i;
        for(i=baseIndex+1;i<ch.length;i++){
            for(int j=baseIndex;j<i;j++){
                if(ch[i]==ch[j]){
                    maxLength = (i-baseIndex)>maxLength?(i-baseIndex):maxLength;
                    baseIndex = j+1;
                    break;
                }
            }
        }
         return (i-baseIndex)>maxLength?(i-baseIndex):maxLength;    
    }
}
原文地址:https://www.cnblogs.com/baizhuang/p/11410855.html