leetcode 76. Minimum Window Substring ,java版解答

Integer 在大于127 的时候 不从常量池里拿,是个对象,所以换成equals 。。。就这个问题,花了我几个小时,最后评论区看到了该问题的解答。。。

class Solution {
   public List<Integer> findAnagrams(String s, String p) {
           int left =0;
           int right = 0;
           List<Integer> result = new LinkedList<>();
           HashMap<Character,Integer>windows = new HashMap<>();
           HashMap<Character,Integer>needs = new HashMap<>();
           int match = 0;
           for(int i=0;i<p.length();i++){
               needs.put(p.charAt(i),needs.getOrDefault(p.charAt(i),0)+1);
           }
           final int allUnique = needs.size();
           while(right<s.length()){
               //如果这个元素是需要的
               if(needs.containsKey(s.charAt(right))){
                   windows.put(s.charAt(right),windows.getOrDefault(s.charAt(right),0)+1);
   // Integer 在大于127 的时候 不从常量池里拿,是个对象,所以换成equals
                   if(windows.get(s.charAt(right)).equals(needs.get(s.charAt(right))))
                       match++;
               }
               //如果满足条件
               while(match == allUnique){
                   //如果是连续的
                   if(right-left + 1 == p.length())
                       result.add(left);
                   if(needs.containsKey(s.charAt(left))){
                       windows.put(s.charAt(left),windows.get(s.charAt(left))-1);
                       if(windows.get(s.charAt(left))<needs.get(s.charAt(left))){
                           match--;
                       }
                   }
                   left++;
               }
               right++;
           }
           return result;
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值