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...