leetcode340. 至多包含 K 个不同字符的最长子串
        【摘要】  给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T。 
示例 1: 
输入: s = "eceba", k = 2 输出: 3 解释: 则 T 为 "ece",所以长度为 3。 示例 2: 
输入: s = "aa", k = 1 输出: 2 解释: 则 T 为 "aa",所以长度为 2。 
思路:双指针,指针中间的是可能的答案。符合要求...
    
    
    
    给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T。
示例 1:
输入: s = "eceba", k = 2
 输出: 3
 解释: 则 T 为 "ece",所以长度为 3。
 示例 2:
输入: s = "aa", k = 1
 输出: 2
 解释: 则 T 为 "aa",所以长度为 2。
思路:双指针,指针中间的是可能的答案。符合要求右指针向右扩,否则更新答案,左指针往右缩。
  
   - 
    
     
    
    
     
      class Solution {
     
    
- 
    
     
    
    
       public int lengthOfLongestSubstringKDistinct(String s, int k) {
     
    
- 
    
     
    
    
      int n = s.length();
     
    
- 
    
     
    
    
      if (n < k+1) return n;
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      int left = 0;
     
    
- 
    
     
    
    
      int right = 0;
     
    
- 
    
     
    
    
      //K-V:K是对应字符,V是最后一次出现的位置。
     
    
- 
    
     
    
    
     
       HashMap<Character, Integer> hashmap = new HashMap<Character, Integer>();
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      int max_len = 0;
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      while (right < n) {
     
    
- 
    
     
    
    
      //符合要求就继续向右扩
     
    
- 
    
     
    
    
      if (hashmap.size() < k+1){
     
    
- 
    
     
    
    
     
       hashmap.put(s.charAt(right), right++);
     
    
- 
    
     
    
    
     
       }
     
    
- 
    
     
    
    
      if (hashmap.size() == k+1) {
     
    
- 
    
     
    
    
      int index = Collections.min(hashmap.values());
     
    
- 
    
     
    
    
     
       hashmap.remove(s.charAt(index));
     
    
- 
    
     
    
    
     
       left = index + 1;
     
    
- 
    
     
    
    
     
       }
     
    
- 
    
     
    
    
     
       max_len = Math.max(max_len, right - left);
     
    
- 
    
     
    
    
     
       }
     
    
- 
    
     
    
    
      return max_len;
     
    
- 
    
     
    
    
     
        }
     
    
- 
    
     
    
    
     
      }
     
    
 
文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。
原文链接:fantianzuo.blog.csdn.net/article/details/104113632
        【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
            cloudbbs@huaweicloud.com
        
        
        
        
        
        
        - 点赞
- 收藏
- 关注作者
 
             
           
评论(0)