以下是使用 Java 实现最长字符串问题的代码:
public int lengthOfLongestSubstring(String s) {
int n = s.length();
int ans = 0;
Map<Character, Integer> map = new HashMap<>();
for (int i = 0, j = 0; j < n; j++) {
char c = s.charAt(j);
if (map.containsKey(c)) {
i = Math.max(map.get(c), i);
}
ans = Math.max(ans, j - i + 1);
map.put(c, j + 1);
}
return ans;
}
在这个代码中,我们使用了哈希表(Map)来记录字符的位置。i 和 j 分别是左右指针,我们不断移动右指针 j 并更新最长子串的长度。当发现重复字符时,我们将左指针 i 移动到重复字符的下一个位置,并继续移动右指针。
这个算法的时间复杂度为 O(n),其中 n 是字符串的长度。空间复杂度为 O(k),其中 k 是字符集的大小。