题解 | #找到字符串中的异位词#

找到字符串中的异位词

https://www.nowcoder.com/practice/9ff491c910e5427fab6ae67745929085

滑动窗口
import java.util.*;


public class Solution {
    public ArrayList<Integer> findWord (String s, String p) {
        HashMap<Character,Integer> window = new HashMap<>();
        HashMap<Character,Integer> need = new HashMap<>();
        for(char c:p.toCharArray()){
            need.put(c,need.getOrDefault(c,0)+1);
        }
        int valid = 0;
        ArrayList<Integer> res = new ArrayList<>();
        int left=0,right=0;
        while(right < s.length()){
            char c = s.charAt(right);
            right++;
            if(need.containsKey(c)){
                window.put(c,window.getOrDefault(c,0)+1);
                if(window.get(c).equals(need.get(c))){
                    valid++;
                }
            }
            if(right-left == p.length()){
                if(valid == need.size()){
                    res.add(left);
                }
                char ch = s.charAt(left);
                left++;
                if(window.containsKey(ch)){
                    if(window.get(ch).equals(need.get(ch))){
                        valid--;
                    }
                    window.put(ch,window.get(ch)-1);
                }
            }
        }
        return res;
    }
}


全部评论

相关推荐

Rena1ssanc...:对的,要是面评没太烂,勤更新简历等捞就行了,腾讯可以无限复活
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务