Day 24
題目描述
思路
初次思路:如果兩個字符串為異位詞,說明它們長度相同并且字母出現的次數相同,于是有以下做法:
- 定義一個map,來保存s中每個字符的出現次數
- 處理特殊情況,如果長度不同,直接返回false
- 從前向后遍歷t
- 如果t中的字符出現在map中并且數量大于0,就將數量減一
- 否則直接返回false
- 最后返回true
class Solution {public boolean isAnagram(String s, String t) {Map<Character,Integer>map1=new HashMap<>();if(s.length()!=t.length()){return false;}for(int i=0;i<s.length();i++){if(map1.containsKey(s.charAt(i))){map1.put(s.charAt(i),map1.get(s.charAt(i))+1);}else{map1.put(s.charAt(i),1);}}for(int i=0;i<t.length();i++){if(map1.containsKey(t.charAt(i))&&map1.get(t.charAt(i))>0){map1.put(t.charAt(i),map1.get(t.charAt(i))-1);}else{return false;}}return true;}
}
進階思路:比較的是兩個字符串,那么直接將每個字符串按照字符順序排序,使用equals比較即可
class Solution {public boolean isAnagram(String s, String t) {if (s.length() != t.length()) {return false;}char[] str1 = s.toCharArray();char[] str2 = t.toCharArray();Arrays.sort(str1);Arrays.sort(str2);return Arrays.equals(str1, str2);}
}
題目描述
思路
這里是找出所有的異位單詞組,做法如下:
- 創建一個map
- 從前向后遍歷字符串數組,將每個字符串按照字符排序
- 判斷map中是否存在排序后的字符串
- 存在,說明map中已經存在與該字符串互為異位單詞,取出map中的字符串數組添加
- 不存在,則創建字符串數組,將該原字符串假如數組,將排序后的字符串和數組加入map
class Solution {public List<List<String>> groupAnagrams(String[] strs) {HashMap<String, List<String>> map = new HashMap<>();for (int i = 0; i < strs.length; i++) {char[] str1 = strs[i].toCharArray();Arrays.sort(str1);if(map.containsKey(String.valueOf(str1))){List<String> list=map.get(String.valueOf(str1));list.add(strs[i]);map.put(String.valueOf(str1),list);}else{List<String> list=new ArrayList<>();list.add(strs[i]);map.put(String.valueOf(str1),list);}}return new ArrayList<>(map.values());}
}