leetcode003无重复字符的最长子串
题目描述:
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke"是一个子序列,不是子串。
解题思路:
1.依次遍历字符串中的每个字符并将其下表和值存储到一个map中
2.判断当前字符是否在map中已经出现,如果出现,则更新开始位置,如果没有出现,则判断是否更新最大长度
时间复杂度O(n^2)
空间复杂度O(1)
class Solution { public int lengthOfLongestSubstring(String s) { // 边界判定 if (s == null) { return 0; } // 开始处理的位置 int start = 0; // 结果 int result = 0; Map<Character, Integer> map = new HashMap<>(s.length()); for(int i = 0; i < s.length(); i++) { char ch = s.charAt(i); // 如果当前字符在从start开始的位置已经出现过了,则更新start为一个元素位置开始 if(map.containsKey(ch) && map.get(ch) >= start) { start = map.get(ch) + 1; } // 如果没有则判断是否更新最大长度 else { result = Math.max(result, i - start + 1); } map.put(ch, i); } return result; } }

浙公网安备 33010602011771号