find All Anagram
题目地址:
http://www.1point3acres.com/bbs/thread-283632-1-1.html
题目:
find all anagram in a string , find all the indices of all the starting anagrams.
List<Integer> findAllAnagram(String haystack, String needle){}。
解题思路:
这道题主要就是用一个长度为needle的size的list,然后用一个map<String, List<Integer>>来保存某个排好序的String,和所有开始的index。
代码:
http://www.1point3acres.com/bbs/thread-283632-1-1.html
题目:
find all anagram in a string , find all the indices of all the starting anagrams.
List<Integer> findAllAnagram(String haystack, String needle){}。
解题思路:
这道题主要就是用一个长度为needle的size的list,然后用一个map<String, List<Integer>>来保存某个排好序的String,和所有开始的index。
代码:
public class FindAllAnagram { List<Integer> findAllAnagram(String haystack, String needle){ List<Character> list = new ArrayList<>(); Map<String, List<Integer>> map = new HashMap<>(); int size = needle.length(); for(int i = 0; i <= haystack.length() - 1; i++){ if(list.size() < size){ list.add(haystack.charAt(i)); } if(list.size() == size){ List<Character> temp = new ArrayList<>(list); Collections.sort(temp); String s = convert(temp); if(!map.containsKey(s)){ map.put(s, new ArrayList<>()); } map.get(s).add(i - size + 1); list.remove(0); } } char[] chars = needle.toCharArray(); Arrays.sort(chars); String str = String.valueOf(chars); for(String s : map.keySet()){ if(s.equals(str)){ return map.get(s); } } return null; } private String convert(List<Character> temp) { StringBuilder sb = new StringBuilder(); for(int i = 0; i <= temp.size() - 1; i++){ sb.append(temp.get(i)); } return sb.toString(); } public static void main(String[] args){ String haystack = "abcdbcab"; String needle = "cba"; FindAllAnagram findAllAnagram = new FindAllAnagram(); List<Integer> rst = findAllAnagram.findAllAnagram(haystack, needle); System.out.println(rst); } }

Comments
Post a Comment