至少包含两个字符的最长字串
寻找字符串的最长子串,该子串最多只能存在两个不同的字符
示例 Input :s= “aabbccc”
Output: “bbccc”;
滑动窗口+哈希表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| public class Main { public static String findLongestSubstring(String s) { if (s == null || s.length() == 0) { return ""; }
int left = 0, right = 0; int maxLength = 0; int start = 0; Map<Character, Integer> charFrequency = new HashMap<>();
while (right < s.length()) { char rightChar = s.charAt(right); charFrequency.put(rightChar, charFrequency.getOrDefault(rightChar, 0) + 1); right++;
while (charFrequency.size() > 2) { char leftChar = s.charAt(left); charFrequency.put(leftChar, charFrequency.get(leftChar) - 1); if (charFrequency.get(leftChar) == 0) { charFrequency.remove(leftChar); } left++; } if (right - left > maxLength) { maxLength = right - left; start = left; } }
return s.substring(start, start + maxLength); }
public static void main(String[] args) { String s = "aabbccc"; System.out.println(findLongestSubstring(s)); } }
|