49. Group Anagrams && 242. Valid Anagram
Given an array of strings, group anagrams together.
For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"],
Return:
[ ["ate", "eat","tea"], ["nat","tan"], ["bat"] ]
Note: All inputs will be in lower-case.
public class Solution { public List<List<String>> groupAnagrams(String[] strs) { Map<String, List<String>> map = new HashMap<>(); for(String s : strs) { char[] key = s.toCharArray(); Arrays.sort(key); String sKey = new String(key); List<String> dest = map.get(sKey); if(dest == null) { dest = new ArrayList<String>(); map.put(sKey, dest); } dest.add(s); } List<List<String>> ret = new ArrayList<>(); for(List<String> group: map.values()) { ret.add(group); } return ret; } }
242. Valid Anagram
Given two strings s and t, write a function to determine if t is an anagram of s.For example,
s = "anagram", t = "nagaram", return true.
s = "rat", t = "car", return false.
Note:
You may assume the string contains only lowercase alphabets.
Follow up:
What if the inputs contain unicode characters? How would you adapt your solution to such case?
public class Solution { public boolean isAnagram(String s, String t) { if(s == null && t == null || s.length() == 0 && t.length() == 0) if((s == null && t != null) || (s != null && t == null) || (s.length() != t.length())) return false; int[] alphabet = new int[26]; for (int i = 0; i < s.length(); ++i) ++alphabet[s.charAt(i) - 'a']; for (int i = 0; i < t.length(); ++i) --alphabet[t.charAt(i) - 'a']; for (int i : alphabet) if (i != 0) return false; return true; } }

浙公网安备 33010602011771号