無重複字元的最長字串問題

2022-06-13 05:42:11 字數 1373 閱讀 8813

leetcode3:無重複字元的最長字串問題

問題描述

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。

示例 1:

輸入: "abcabcbb"

輸出: 3

解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。

示例 2:

輸入: "bbbbb"

輸出: 1

解釋: 因為無重複字元的最長子串是 "b",所以其長度為 1。

示例 3:

輸入: "pwwkew"

輸出: 3

這道題,我自己的思路就是利用雙指標儲存滑動視窗的上下線。具體利用hashmap儲存每乙個元素的位置資訊,然後取資料的時候,如果hashmap中存在,那麼我們可以知道元素的視窗開始變化。

public

intlengthoflongestsubstring(string s) else

} else if (i == len - 1)

maps.put(dest, i);

*/if

(maps.containskey(dest))

max = math.max(max, i - low + 1);

maps.put(dest, i + 1);

}return

max;

}

抓住問題的特殊點,因為表示的是字串,那麼可以用128維的陣列來儲存字串中的每乙個字元。也就是說可以利用陣列替換hashmap.

/**

* 利用字串ascii碼來替代hashmap

* @param

s *

@return

*/public

intlengthoflongestsubstringtrick(string s)

return

max;

}

也可以把問題轉換為乙個dp問題,dp動態方程是,dp[i]表示以位置i上的資料結尾的最長字串的長度。那麼dp[i]取值範圍,最大為dp[i-1]+1, 最小為1。 當然此方法醉花情況下複雜度為o(n^2)

/**

* 狀態轉移方程 dp[i]表示以i為結尾的連續字串的最大長度 dp[i]=取值範圍**

@param

s *

@return

*/public

intlengthoflongestsubstringdp(string s)

prenum =cnum;

max = max > cnum ?max : cnum;

}return

max;

}

無重複字元的最長字串

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3 ...

無重複字元的最長字串

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 這種字串字串問題,經常用到滑動...

無重複字串的最長字串

無重複字元的最長子串 難度中等 給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3...