LeetCode 3: Longest Substring Without Repeating Characters(最长无重复字符串)

╰+哭是因爲堅強的太久メ 2022-05-16 11:09 202阅读 0赞

文章最前: 我是Octopus,这个名字来源于我的中文名—章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。

相关文章:

  1. LeetCode:55. Jump Game(跳远比赛)
  2. Leetcode:300. Longest Increasing Subsequence(最大增长序列)
  3. LeetCode:560. Subarray Sum Equals K(找出数组中连续子串和等于k)

文件目录:

题目描述:

java实现方式1:

python实现方式1:

源码地址:

https://github.com/zhangyu345293721/leetcode


题目描述:

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

  1. 输入: "abcabcbb"
  2. 输出: 3
  3. 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3

示例 2:

  1. 输入: "bbbbb"
  2. 输出: 1
  3. 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1

示例 3:

  1. 输入: "pwwkew"
  2. 输出: 3
  3. 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3
  4. 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

来源:力扣(LeetCode)


java实现方式1:

  1. /**
  2. * 最长无重复字符串
  3. *
  4. * @param s 字符串
  5. * @return 长度S
  6. */
  7. public int lengthOfLongestSubstring(String s) {
  8. if (s.length() == 0) {
  9. return 0;
  10. }
  11. HashMap<Character, Integer> map = new HashMap<>();
  12. int left = 0;
  13. int length = 0;
  14. for (int i = 0; i < s.length(); i++) {
  15. if (map.containsKey(s.charAt(i))) {
  16. left = Math.max(left, map.get(s.charAt(i)) + 1);
  17. }
  18. map.put(s.charAt(i), i);
  19. length = Math.max(length, i - left + 1);
  20. }
  21. return length;
  22. }

时间复杂度:O(n)

空间复杂度:O(n)


python实现方式1:

  1. def length_of_longest_substring(s: str) -> bool:
  2. '''
  3. 最大无重复字符串
  4. Args:
  5. s: 字符串
  6. Returns:
  7. 长度
  8. '''
  9. dict_map = {}
  10. length = len(s)
  11. left = 0
  12. max_length = 0
  13. for i in range(length):
  14. if s[i] in dict_map:
  15. left = max(left, dict_map.get(s[i]) + 1)
  16. dict_map[s[i]] = i
  17. max_length = max(max_length, i - left + 1)
  18. return max_length

时间复杂度:O(n)

空间复杂度:O(n)


源码地址:

https://github.com/zhangyu345293721/leetcode

发表评论

表情:
评论列表 (有 0 条评论,202人围观)

还没有评论,来说两句吧...

相关阅读