3、字符串求最長(zhǎng)子串

問(wèn)題:

給定一個(gè)字符串,找出不含有重復(fù)字符的最長(zhǎng)子串的長(zhǎng)度。
示例 1:
輸入: "abcabcbb"
輸出: 3
解釋: 無(wú)重復(fù)字符的最長(zhǎng)子串是 "abc",其長(zhǎng)度為 3。
示例 2:
輸入: "bbbbb"
輸出: 1
解釋: 無(wú)重復(fù)字符的最長(zhǎng)子串是 "b",其長(zhǎng)度為 1。
示例 3:
輸入: "pwwkew"
輸出: 3
解釋: 無(wú)重復(fù)字符的最長(zhǎng)子串是 "wke",其長(zhǎng)度為 3。
請(qǐng)注意,答案必須是一個(gè)子串,"pwke" 是一個(gè)子序列 而不是子串。

思路

  • 思路1:兩循環(huán)來(lái)獲取所有子串,通過(guò)HashMap判斷字符是否重復(fù)
 public static int lengthOfLongestSubstring(String s) {
        int len = 0;
        Map map = new HashMap();
        for (int i = 0; i < s.length(); i++) {
            for (int j = i; j < s.length(); j++) {
                char tmp = s.charAt(j);
                if (map.containsKey(tmp)) {
                    len = len < map.size() ? map.size() : len;
                    map.clear();
                    break;
                } else {
                    map.put(tmp, tmp);
                }
            }

        }
        len = len < map.size() ? map.size() : len;
        return len;
    }
  • 思路2:一個(gè)循環(huán),通過(guò)HashMap存放在字符串中最大位置,通過(guò)變量和最大位置差獲得結(jié)果
 public int lengthOfLongestSubstring2(String s) {
        int n = s.length(), ans = 0;
        // 存放字符在字符所在最大位置
        Map<Character, Integer> map = new HashMap<>();
        for (int j = 0, i = 0; j < n; j++) {
            if (map.containsKey(s.charAt(j))) {
                i = Math.max(map.get(s.charAt(j)), i);
            }
            ans = Math.max(ans, j - i + 1);
            map.put(s.charAt(j), j + 1);
        }
        return ans;
    }
  • 思路3:在思路2基礎(chǔ)上變動(dòng),char字符ascii碼128個(gè),用數(shù)組代替HashMap,通過(guò)字符ascii碼當(dāng)作數(shù)組位置
public int lengthOfLongestSubstring3(String s) {
        int n = s.length(), ans = 0;
        //字符ascii碼-數(shù)組位置,字符在字符串最大位置-值
        int[] index = new int[128];
        for (int j = 0, i = 0; j < n; j++) {
            i = Math.max(index[s.charAt(j)], i);
            ans = Math.max(ans, j - i + 1);
            index[s.charAt(j)] = j + 1;
        }
        return ans;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.字符串中的元素 2.python中可以把字符串看成是一個(gè)序列(容器),容器中內(nèi)容是字符。 每一個(gè)字符可以稱為字...
    煙雨旎旎閱讀 233評(píng)論 0 0
  • 1.函數(shù)的基礎(chǔ): 函數(shù)的定義 定義格式:def 函數(shù)名(): 函數(shù)的調(diào)用 調(diào)用函數(shù)很簡(jiǎn)單的,通過(guò) 函數(shù)名() 即可...
    金政銳閱讀 335評(píng)論 0 0
  • 正則 1、什么是正則表達(dá)式: 能讓計(jì)算機(jī)讀懂的字符串匹配規(guī)則。 2、正則表達(dá)式的寫法: var re=new Re...
    金政銳閱讀 142評(píng)論 0 0
  • 《草塘紀(jì)事:動(dòng)物》 草塘方圓百畝,水豐草茂,多動(dòng)物,組團(tuán)的也多,青皮蛙,魚蝦蟹,麻鴨子,白肚蛇,浪浪地,把靜靜的水...
    合肥張建春閱讀 361評(píng)論 0 0
  • 剛下飛機(jī),行李丟了。確切的說(shuō),被偷了! 夢(mèng)境起于機(jī)場(chǎng),在旋轉(zhuǎn)帶等行李,剛剛等到自己的包裹,變伸手去提,心里一個(gè)激靈...
    留著一撇小胡子裝成熟閱讀 140評(píng)論 0 0

友情鏈接更多精彩內(nèi)容