雁过留声 发表于 2025-4-19 15:07:50

力扣面试150题--有效的字母异位词和字母异位词分组

Day 24

标题形貌

https://i-blog.csdnimg.cn/direct/08a7e41d6c114fa3918434c57f971631.png
思路

初次思路:如果两个字符串为异位词,说明它们长度雷同并且字母出现的次数雷同,于是有以下做法:

[*]定义一个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);
    }
}
标题形貌

https://i-blog.csdnimg.cn/direct/afabaf55062540a6ab5219cb9ea6e003.png
思路

这里是找出全部的异位单词组,做法如下:

[*]创建一个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.toCharArray();
            Arrays.sort(str1);
            if(map.containsKey(String.valueOf(str1))){
                List<String> list=map.get(String.valueOf(str1));
                list.add(strs);
                map.put(String.valueOf(str1),list);
            }
            else{
                List<String> list=new ArrayList<>();
                list.add(strs);
                map.put(String.valueOf(str1),list);
            }
      }
      return new ArrayList<>(map.values());
    }
}

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 力扣面试150题--有效的字母异位词和字母异位词分组