340. 至多包含 K 个不同字符的最长子串(困难)-滑动窗口双指针哈希表
Posted hequnwang10
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了340. 至多包含 K 个不同字符的最长子串(困难)-滑动窗口双指针哈希表相关的知识,希望对你有一定的参考价值。
一、题目描述
二、解题
哈希表、滑动窗口双指针
这题的思想就是找K个不同字符的字符串,并且这个连续字符串的长度够长,使用哈希表保存每个字符的最远边界,K个不同的字符可以使用哈希表的长度保存。
public int solution(String s, int k)
int len = s.length();
if (len * k == 0) return 0;
int left = 0, right = 0;
int ans = 0;
// key 为字符,value 为字符在 s[left] ... s[right] 中最右边那个索引
Map<Character, Integer> map = new HashMap<>();
while (right < len)
map.put(s.charAt(right), right);
right++;
if (map.size() > k)
int min = Collections.min(map.values());
map.remove(s.charAt(min));
left = min + 1;
ans = Math.max(ans, right - left);
return ans;
完整代码:
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class test7
public static void main(String[] args)
test7 test =new test7();
int res = test.solution("ececbac", 2);
System.out.println(res);
public int solution(String s, int k)
int len = s.length();
if (len * k == 0) return 0;
int left = 0, right = 0;
int ans = 0;
// key 为字符,value 为字符在 s[left] ... s[right] 中最右边那个索引
Map<Character, Integer> map = new HashMap<>();
while (right < len)
map.put(s.charAt(right), right);
right++;
if (map.size() > k)
int min = Collections.min(map.values());
map.remove(s.charAt(min));
left = min + 1;
ans = Math.max(ans, right - left);
return ans;
以上是关于340. 至多包含 K 个不同字符的最长子串(困难)-滑动窗口双指针哈希表的主要内容,如果未能解决你的问题,请参考以下文章
java 340.具有最多K个不同字符的最长子串(#1).java
java 340.具有最多K个不同字符的最长子串(#1).java
java 340.具有最多K个不同字符的最长子串(#1).java
java 340.具有最多K个不同字符的最长子串(#1).java