Java给定一个字符串s找出不含有重复字符的最长子串的长度不使用滑动窗口的方法
可以使用哈希表来解决这个问题。
算法步骤如下:
- 初始化一个哈希表,用于记录每个字符最后出现的位置。
- 初始化两个变量:maxLen表示最长子串的长度,start表示最长子串的起始位置。
- 遍历字符串s,对于每个字符c:
- 如果哈希表中已经存在字符c,更新start为字符c的下一个位置。
- 计算当前子串的长度,即i - start + 1,并更新maxLen。
- 将字符c的位置更新为i。
- 返回maxLen。
以下是Java代码实现:
import java.util.HashMap;
public class Solution {
public int lengthOfLongestSubstring(String s) {
if (s == null || s.length() == 0) {
return 0;
}
HashMap<Character, Integer> map = new HashMap<>();
int maxLen = 0;
int start = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (map.containsKey(c)) {
start = Math.max(start, map.get(c) + 1);
}
int len = i - start + 1;
maxLen = Math.max(maxLen, len);
map.put(c, i);
}
return maxLen;
}
}
时间复杂度:O(n),其中n是字符串s的长度。遍历一次字符串s,每个字符都需要O(1)的时间来更新哈希表和计算子串长度。
空间复杂度:O(m),其中m是字符集的大小。哈希表最多存储m个字符的位置
原文地址: https://www.cveoy.top/t/topic/iFIJ 著作权归作者所有。请勿转载和采集!