自己写的没写对 但是大体有了滑动窗口的思路 也不想改了 感觉用人家的方法更好 这个放在字典里面不好
public static void main(String[] args) { // TODO Auto-generated method stub String s1="as"; String s2="asdfgh"; System.out.print(Leetcode567.checkInclusion(s1, s2)); } //自己写的是放入一个键值对的map里面 键就是字符char 值就是包含个数 //因为子串的排列相同就是所含个数相同 public static boolean checkInclusion(String s1, String s2) { Map<Character,Integer> map =new HashMap<Character,Integer>(); Map<Character,Integer> map1 =new HashMap<Character,Integer>(); int len=s1.length();; for(int i=0;i<len;i++){ char c = s1.charAt(i); if(map.containsKey(c)) { map.replace(c, map.get(c), map.get(c)+1); } else { map.put(c,1); } } int right=0; for(int i=0;i<s2.length();i++) { for(int j=0;j<s2.length();j++) { char c = s2.charAt(j); while(right-i<len-1) { if(map1.containsKey(c)) { map1.replace(c, map.get(c), map.get(c)+1); } else { map1.put(c,1); } right=right+1; } if(map1.equals(map)) { return true; } else { char ch = s2.charAt(i); if(map1.get(ch)!= 1) {//这块bug 因为不可以和一做比较 因为没有时返回空 map1.replace(ch, map.get(ch)-1); } else { map1.remove(ch); if(map1.containsKey(c)) { map1.replace(c, map.get(c), map.get(c)+1); } else { map1.put(c,1); } right=right+1; } } // map1.replace(s2.charAt(i), map.get(c), map.get(c)+1); } } return false; } }
标签:String,int,s2,s1,567,力扣,checkInclusion,字符串,HashMap From: https://www.cnblogs.com/ayuanjiejie/p/17170749.html