leetcode 题3
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
解题方法:采用滑窗法,
//i:窗口的第一个字符位置
//j:窗口之外的第一个字符 其中 i不能超过j
//k:用于遍历窗口
//我的思路:当遇到窗口中的字符s[k]与窗口外的字符s[j]相等时,将此时窗口的首位置移到k处
//如果s[j]字符与窗口内的字符都不相等,我们再次计算长度即可,
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int max = 0; //最大长度
int i = 0; // 计算字符串长度的参考位置 也就是窗口的首位置
int size = s.size(); //字符串的长度
for(int j =0 ; j <size ; j++)
{
for (k = i ; k < j ; k++)
{
if (s[k] == s[j])
{
i = k +1;
}
}
max = ( max > (j - i +1))? max : ( j - i +1);
}
return max;
}
};