题目:
我的解答:
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; } }