Longest Substring Without Repeating Characters

題意:求一個字符串的最長不含重複字符的子字符串長度;數組

示例:spa

input:pwwkwcode

output:2blog

intput:dvdf字符串

output:3input

 

分析:仍是那句話,每分析一個問題的時候都要問本身,本身的大腦是如何找出正確答案的,將本身的分析轉化爲代碼此題便解string

題目要求不含重複字符,且是子字符串;it

1. 以輸入一爲例,當數到pw時,重複字符便出現了(字符串長度爲2);class

2. 因而從第二個w從新計數,到wk時,重複字符再出現(字符串長度爲2);di

3. 如此到最後一個字符,結果便爲2;

提煉出:遇到重複字符,字符長度需從新計數,最終獲得這些字符長度的最大值;

如此首先咱們須要斷定字符是否以前出現過,其次回想一下咱們是如何計數的,即當前位置-重複字符出現的那一位置+1,那麼咱們便須要記錄字符出現的位置

那麼咱們即可以使用一個數組來記錄字符出現的位置(數組下標爲字符,值爲位置index),若未出現過則值爲0

如此代碼以下:

public int lengthOfLongestSubstring(String s) {
        int[] site = new int[256];
        int left = 0;
        int max = 0;
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if (site[ch] == 0 || site[ch] < left) {
                max = Math.max(max, i - left + 1);
            } else {
                left = site[ch];
            }
            site[ch] = i + 1;
        }
        return max;
    }
相關文章
相關標籤/搜索