剑指 Offer 48. 最长不含重复字符的子字符串
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
class Solution {
public int lengthOfLongestSubstring(String s) {
if (s == null || s.length() == 0) {
return 0;
}
Map cntMap = new HashMap<>();
int ans = 0;
int left = 0, right = 0;
while (right < s.length()) {
cntMap.put(s.charAt(right), cntMap.getOrDefault(s.charAt(right), 0) + 1);
if (cntMap.get(s.charAt(right)) == 2) {
while (cntMap.get(s.charAt(left)) != 2) {
cntMap.put(s.charAt(left), cntMap.get(s.charAt(left)) - 1);
left++;
}
cntMap.put(s.charAt(left), cntMap.get(s.charAt(left)) - 1);
left++;
}
ans = Math.max(ans, right - left + 1);
right++;
}
return ans;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
System.out.println(new Solution().lengthOfLongestSubstring(in.next()));
}
}
}