
解题思路:本题的目的是在给定的字符串中,找出一个不含相同字母的子串。因此首先想到滑动窗口,即给定一个left和一个right,维护一个不包含相同字母子串的窗口。使用一个集合set作为辅助,每次将right向右移动一次,如果right对应的字符没有出现在set中,则无需操作;反之,则清除掉set中所有元素,重新计算滑窗,并将left移动到此时right的位置。right每次向右移动,都让结果res取 max(res, right-left+1)。
AC代码:
class Solution {
public int lengthOfLongestSubstring(String s) {
Set<Character> set = new HashSet<>();
int res = 0;
for(int l=0, r=0; r<s.length(); r++)
{
char c = s.charAt(r);
while(set.contains(c))
{
set.remove(s.charAt(l));
l++;
}
set.add(c);
res = Math.max(res, r-l+1);
}
return res;
}
}

本文探讨了一种解决编程问题的策略,即如何在字符串中找到最长的不包含重复字符的子串。利用滑动窗口的概念,通过一个哈希集合来跟踪窗口内的字符,当遇到重复字符时更新窗口并计算子串长度。该方法有效地实现了在O(n)的时间复杂度内找到答案。
250





