給定一個字符串,請你找出其中不含有重復字符的 最長子串 的長度。


給定一個字符串,請你找出其中不含有重復字符的 最長子串 的長度。

示例 1:

輸入: "abcabcbb"
輸出: 3 
解釋: 因為無重復字符的最長子串是 "abc",所以其長度為 3。

示例 2:

輸入: "bbbbb"
輸出: 1
解釋: 因為無重復字符的最長子串是 "b",所以其長度為 1。

示例 3:

輸入: "pwwkew"
輸出: 3
解釋: 因為無重復字符的最長子串是 "wke",所以其長度為 3

請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串。

第一次一次性通過所有測試用例!!!!!!!!!!!!!!!!!!!!

/**
 * @Auther:lzx
 * @Date: 2019/10/12 16:03
 * @Description:給定一個字符串,請你找出其中不含有重復字符的 最長子串 的長度。
 */
public class leecode3 {
    public static void main(String[] args) {
        System.out.println(lengthOfLongestSubstring("pwwkew"));
    }
    public static int lengthOfLongestSubstring(String s) {
        if (s.isEmpty()){//判斷字符串是否為空
         return 0;
        }else{//不為空
            int max=1;//從第一個字符開始,假設1就為最大值
            int sum=1;
            String s1=""+s.charAt(0);//獲取字符串中第一個字符,將其作為flag
            if(s.length()==1){
                return 1;//判斷字符串長度是否為1,為1直接返回1
            }
            for (int i = 1; i < s.length(); i++) {//從第二個字符開始遍歷
                if(s1.indexOf(""+s.charAt(i))!=-1){//判斷flag字符中是否還有下一個字符
                    int n1=s1.length()-s1.indexOf(""+s.charAt(i))-1;//找到flag字符中含有下一個字符的位置,並截取其后字符的長度
                    sum=n1+1;
                    s1=s1.substring(s1.indexOf(""+s.charAt(i))+1,s1.length())+s.charAt(i);//截取原flag其后字符並加上末端的重復字符形成新的flag字符
                }else{
                    sum=sum+1;//flag字符中沒有有下一個字符,sum+1並在flag字符中加上下一個字符
                    s1=s1+s.charAt(i);
                }
                if(sum>max){//當sum>max,替換max
                    max=sum;
                }
            }
            return max;
        }

    }
}

執行用時 :39 ms, 在所有 Java 提交中擊敗了25.96%的用戶

內存消耗 :38.1 MB, 在所有 Java 提交中擊敗了89.59%的用戶


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM