無重複字元的最長子串

2021-10-22 23:40:01 字數 1472 閱讀 2129

1:解題思路

因為是子串,那任意子串的結尾字元一定是原始字串中的其中乙個字元。所以只需求出每個字元,以它結尾的最長無重複字元長度,再取最大長度即可。再借助動態規劃思想,下乙個字元的最長無重複可由上乙個字元的最長無重複子串推出,即比較當前字串上一次出現的位置pi和上乙個字元最長不重複子串的開始位置li,即可算出當前字元的最長無重複子串開始位置。

/** * 題目:

* 無重複字元的最長子串

* 描述:

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

* 示例:

* 輸入: "abcabcbb"

* 輸出: 3

*

* 輸入: "bbbbb"

* 輸出: 1

*

* 輸入: "pwwkew"

* 輸出: 3

* @author μr.ηobοdy

* * @date 2020-03-28

* */

public

class

lengthoflongestsubstring

public

static

intlengthoflongestsubstring

(string s)

int maxlen =1;

char

chars = s.

tochararray()

;// 猜想字串都是單位元組字元,單位元組字元只有128位,這樣效率快

// 否則需要用map進行記錄

int[

] preindex =

newint

[128];

// 初始化每個字元上乙個出現在字串位置都不存在,即-1

for(

int i =

1; i < preindex.length; i++

)// 字串的第乙個字元特殊處理,即該字元上一次出現的位置即當前位置

preindex[chars[0]

]=0;

// chars[i-1]字元結尾的最長不重複子串的開始索引

int li =0;

for(

int i =

1; i < chars.length; i++

)// 更新這個字元最後出現的位置

preindex[chars[i]

]= i;

// 比較最長字串的長度

maxlen = math.

max(maxlen, i - li +1)

;}return maxlen;

}}

無重複字元最長子串

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

無重複字元最長子串

題目描述 給定乙個字串,找出不含有重複字元的 最長子串 的長度。示例 給定 abcabcbb 沒有重複字元的最長子串是 abc 那麼長度就是3。給定 bbbbb 最長的子串就是 b 長度是1。給定 pwwkew 最長子串是 wke 長度是3。請注意答案必須是乙個子串,pwke 是子串行而不是子串 i...

無重複字元的最長子串

給定乙個字串,找出不含有重複字元的最長子串的長度。示例 給定 abcabcbb 沒有重複字元的最長子串是 abc 那麼長度就是3。給定 bbbbb 最長的子串就是 b 長度是1。給定 pwwkew 最長子串是 wke 長度是3。請注意答案必須是乙個子串,pwke 是 子串行 而不是子串。int le...