给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。

思路:滑动窗口。建立一个动态的窗口(实际就是无重复的子串)遍历主串,每遍历一个新字符则在窗口中查找是否包含该字符,没有的话则窗口增大,继续遍历。若已存在该字符则记录窗口长度,将窗口滑动至重复字符后,继续向下遍历,最后返回窗口的最大长度。
方法一:
public class Solution { public int lengthOfLongestSubstring(String s) { if(null==s||s.length()==0){ return 0; } int maxLen=1; String tempStr=s.substring(0,1); for(int i=1;i<s.length();i++){ String str=s.substring(i,i+1); if(tempStr.contains(str)){ tempStr=tempStr.substring(tempStr.indexOf(str)+1)+str; }else{ tempStr+=str; } if(maxLen<tempStr.length()){ maxLen=tempStr.length(); } } return maxLen; } }
方法二:
public class Solution { public int lengthOfLongestSubstring(String s) { if(null==s||s.length()==0){ return 0; } int startIndex=0; int endIndex=1; int maxLen=1; int len=1; for(int i=1;i<s.length();i++){ int index = s.substring(startIndex, endIndex).indexOf(s.charAt(i)); if(index>=0){ len=endIndex-startIndex-index; startIndex=startIndex+index+1; }else{ len++; } endIndex++; if(maxLen<len){ maxLen=len; } } return maxLen; } }
posted on
浙公网安备 33010602011771号