使用滑动窗口的方法来解决这个问题。\n\n算法步骤如下:\n1. 定义两个指针,left和right,分别表示子串的起始位置和结束位置。\n2. 初始化最长子串的长度maxLen为0。\n3. 遍历字符串s,将right指针从0开始向右移动,同时将遇到的字符添加到一个集合中。\n4. 如果遇到的字符在集合中已经存在,表示出现了重复字符,此时需要移动left指针,直到集合中不包含重复字符。\n5. 在每次移动left指针的过程中,更新maxLen的值为当前子串的长度和maxLen中的较大值。\n6. 重复步骤3-5,直到right指针遍历完整个字符串s。\n7. 返回maxLen作为结果。\n\n以下是Java代码实现:\n\njava\npublic int lengthOfLongestSubstring(String s) {\n int n = s.length();\n int maxLen = 0;\n Set<Character> set = new HashSet<>();\n int left = 0, right = 0;\n while (right < n) {\n if (!set.contains(s.charAt(right))) {\n set.add(s.charAt(right));\n maxLen = Math.max(maxLen, right - left + 1);\n right++;\n } else {\n set.remove(s.charAt(left));\n left++;\n } \n }\n return maxLen;\n}\n\n\n时间复杂度:O(n),其中n是字符串s的长度。滑动窗口的过程中,left和right指针分别遍历了一次字符串s。\n\n空间复杂度:O(min(n, m)),其中n是字符串s的长度,m是字符集的大小。在滑动窗口的过程中,使用了一个集合来存储不重复的字符。最坏情况下,字符集的大小为n,此时空间复杂度为O(n)。

Java实现无重复字符的最长子串长度(不使用HashMap)

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

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