可以使用哈希表来解决这个问题。\n\n算法步骤如下:\n1. 初始化一个哈希表,用于记录每个字符最后出现的位置。\n2. 初始化两个变量:maxLen表示最长子串的长度,start表示最长子串的起始位置。\n3. 遍历字符串s,对于每个字符c:\n - 如果哈希表中已经存在字符c,更新start为字符c的下一个位置。\n - 计算当前子串的长度,即i - start + 1,并更新maxLen。\n - 将字符c的位置更新为i。\n4. 返回maxLen。\n\n以下是Java代码实现:\n\njava\nimport java.util.HashMap;\n\npublic class Solution {\n public int lengthOfLongestSubstring(String s) {\n if (s == null || s.length() == 0) {\n return 0;\n }\n \n HashMap<Character, Integer> map = new HashMap<>();\n int maxLen = 0;\n int start = 0;\n \n for (int i = 0; i < s.length(); i++) {\n char c = s.charAt(i);\n \n if (map.containsKey(c)) {\n start = Math.max(start, map.get(c) + 1);\n }\n \n int len = i - start + 1;\n maxLen = Math.max(maxLen, len);\n \n map.put(c, i);\n }\n \n return maxLen;\n }\n}\n\n\n时间复杂度:O(n),其中n是字符串s的长度。遍历一次字符串s,每个字符都需要O(1)的时间来更新哈希表和计算子串长度。\n\n空间复杂度:O(m),其中m是字符集的大小。哈希表最多存储m个字符的位置。

Java 无滑动窗口实现最长无重复子串长度

原文地址: https://www.cveoy.top/t/topic/qmgG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录