题目
给定一个字符串 ,请你找出其中不含有重复字符的最长子串的长度。
分析
1、初始化两个指针,start 和 end,它们定义了正在考虑的子串的边界。2、使用一个哈希集合(HashSet)来记录当前子串中的字符,以便快速检查是否有重复的字符。
3、遍历字符串,将字符逐个添加到哈希集合中,并移动 end 指针。
4、如果遇到重复字符,则从哈希集合中移除 start 指针指向的字符,并向前移动 start 指针。
5、记录在每次 end 移动后无重复字符子串的最大长度。
代码
import java.util.HashSet;import java.util.Set;
public class Solution { public static int lengthOfLongestSubstring(String s) { Set<Character> charSet = new HashSet<>(); int start = 0; int maxLen = 0; for (int end = 0; end < s.length(); end++) { while (charSet.contains(s.charAt(end))) { charSet.remove(s.charAt(start)); start++; } charSet.add(s.charAt(end)); maxLen = Math.max(maxLen, end - start + 1); } return maxLen; }
public static void main(String[] args) { String input = "abcabcbb"; // 示例输入,可以根据需要更改 System.out.println("Length of the longest substring without repeating characters: " + lengthOfLongestSubstring(input)); }}
代码解析
1、定义了一个 lengthOfLongestSubstring 方法来计算不含重复字符的最长子串的长度。
2、使用 HashSet 来存储已经出现过的字符。
3、使用两个指针 start 和 end 来定义当前考虑的子串。
4、在 end 指针遍历字符串的过程中,如果发现重复字符,则从 charSet 中移除 start 指针对应的字符,并且移动 start 指针。
5、计算并更新最长子串的长度 maxLen。
领取专属 10元无门槛券
私享最新 技术干货