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

 思路:滑动窗口。建立一个动态的窗口(实际就是无重复的子串)遍历主串,每遍历一个新字符则在窗口中查找是否包含该字符,没有的话则窗口增大,继续遍历。若已存在该字符则记录窗口长度,将窗口滑动至重复字符后,继续向下遍历,最后返回窗口的最大长度。

方法一:

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 2021-05-26 15:11  会飞的金鱼  阅读(49)  评论(0)    收藏  举报