标签:The lis hash slist list bsp put and abc
Given a string s and a non-empty string p, find all the start indices of p‘s anagrams in s. Strings consists of lowercase English letters only and the length of both strings s and p will not be larger than 20,100. The order of output does not matter. Example 1: Input: s: "cbaebabacd" p: "abc" Output: [0, 6] Explanation: The substring with start index = 0 is "cba", which is an anagram of "abc". The substring with start index = 6 is "bac", which is an anagram of "abc". Example 2: Input: s: "abab" p: "ab" Output: [0, 1, 2] Explanation: The substring with start index = 0 is "ab", which is an anagram of "ab". The substring with start index = 1 is "ba", which is an anagram of "ab". The substring with start index = 2 is "ab", which is an anagram of "ab".
这道题先想到了用hash存一下p出现的字符和个数,然后遍历s来做。但超时了:
class Solution { public List<Integer> findAnagrams(String s, String p) { List<Integer> resList = new ArrayList<>(); if(s == null || p == null){ return resList; } Map<Character, Integer> map =new HashMap<>(); for(char c : p.toCharArray()){ map.put(c, map.getOrDefault(c,0)+1); } for(int i = 0; i <= s.length()-p.length(); i++){ Map<Character, Integer> temp =new HashMap<>(map); for(int j = i; j < i + p.length(); j++){ char c = s.charAt(j); if(temp.containsKey(c)){ int v = temp.get(c) - 1; if(v < 0){ break; } temp.put(c,v); } else{break;} } boolean match = true; for(char c : temp.keySet()){ if(temp.get(c) != 0){ match = false; break; } } if(match){ resList.add(i); } } return resList; } }
LeetCode - Find All Anagrams in a String
标签:The lis hash slist list bsp put and abc
原文地址:https://www.cnblogs.com/incrediblechangshuo/p/9737854.html