本文主要是介绍LeetCode438 Find All Anagrams in a String,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目要求:
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".
题目虽然是EASY但是一点也不简单,使用划窗法进行处理
这个代码时间超时
public class Solution {public List<Integer> findAnagrams(String s, String p) {//使用暴力搜索的方法进行处理//这种方法计算时间超时List<Character> set = new LinkedList<>();List<Character> setTem = new LinkedList<>();List<Integer> list = new ArrayList<>();char[] arr = p.toCharArray();for(char c : arr) set.add(c);int num = arr.length;for(int i = 0; i < s.length() - num + 1; i++) {setTem.clear();setTem.addAll(set);for(int j = 0; j < num; j++) {if(setTem.contains(s.charAt(i + j))) setTem.remove((Character) s.charAt(i + j));else break;if(setTem.size() == 0) list.add(i);}}return list;}
}
滑窗法可以
public class Solution {public List<Integer> findAnagrams(String s, String p) {List<Integer> list = new ArrayList<>();if(s.length() == 0 || p.length() == 0 || p.length() > s.length()) return list;int[] hasharr = new int[256];char[] arrp = p.toCharArray();for (char c : arrp) hasharr[c]++;int right = 0, left = 0;int count = p.length();while(right < s.length()) {if(hasharr[s.charAt(right++)]-- >= 1) count--;if(count == 0) list.add(left);if(right - left == p.length() && hasharr[s.charAt(left++)]++ >= 0) count++;}return list;}
}
这篇关于LeetCode438 Find All Anagrams in a String的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!