题目描述
给定一个字符串,找出最长的不具有重复字符的子串的长度。例如,“abcabcbb”不具有重复字符的最长子串是“abc”,长度为3。对于“bbbbb”,最长的不具有重复字符的子串是“b”,长度为1。 示例1 输入 ::"" 输出 : 0
思路解析:本题目可以说是一个很典型的利用滑动窗口的字符串类型的题目。设定两个指针,限定了一个窗口,窗口内的字符不能够重复,每次右指针移动时都会检查窗口内是否是重复元素,如果有的话那么调整左指针的位置,定义一个res值记录最大的窗口值就是问题的解。
class Solution {
public:
int lengthOfLongestSubstring(string s
) {
if(s
.empty())
return 0;
map
<char,int> book
;
int i
,Max
=0,pre
=-1;
for(i
=0;i
<s
.length();i
++)
book
[s
[i
]]=-1;
for(i
=0;i
<s
.length();i
++)
{
pre
=max(pre
,book
[s
[i
]]);
Max
=max(Max
,i
-pre
);
book
[s
[i
]]=i
;
}
return Max
;
}
};