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

打印 上一主题 下一主题

主题 1802|帖子 1802|积分 5406

Day 24

标题形貌


思路

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

  • 定义一个map,来生存s中每个字符的出现次数
  • 处理特殊情况,如果长度差别,直接返回false
  • 从前向后遍历t
  • 如果t中的字符出现在map中并且数量大于0,就将数量减一
  • 否则直接返回false
  • 末了返回true
  1. class Solution {
  2.     public boolean isAnagram(String s, String t) {
  3.         Map<Character,Integer>map1=new HashMap<>();
  4.         if(s.length()!=t.length()){
  5.             return false;
  6.         }
  7.         for(int i=0;i<s.length();i++){
  8.             if(map1.containsKey(s.charAt(i))){
  9.                 map1.put(s.charAt(i),map1.get(s.charAt(i))+1);
  10.             }
  11.             else{
  12.                 map1.put(s.charAt(i),1);
  13.             }
  14.         }
  15.         for(int i=0;i<t.length();i++){
  16.             if(map1.containsKey(t.charAt(i))&&map1.get(t.charAt(i))>0){
  17.                 map1.put(t.charAt(i),map1.get(t.charAt(i))-1);
  18.             }
  19.             else{
  20.                 return false;
  21.             }
  22.         }
  23.         return true;
  24.     }
  25. }
复制代码
进阶思路:比较的是两个字符串,那么直接将每个字符串按照字符顺序排序,利用equals比较即可
  1. class Solution {
  2.     public boolean isAnagram(String s, String t) {
  3.         if (s.length() != t.length()) {
  4.             return false;
  5.         }
  6.         char[] str1 = s.toCharArray();
  7.         char[] str2 = t.toCharArray();
  8.         Arrays.sort(str1);
  9.         Arrays.sort(str2);
  10.         return Arrays.equals(str1, str2);
  11.     }
  12. }
复制代码
标题形貌


思路

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

  • 创建一个map
  • 从前向后遍历字符串数组,将每个字符串按照字符排序
  • 判定map中是否存在排序后的字符串
  • 存在,说明map中已经存在与该字符串互为异位单词,取出map中的字符串数组添加
  • 不存在,则创建字符串数组,将该原字符串如果数组,将排序后的字符串和数组加入map
  1. class Solution {
  2.     public List<List<String>> groupAnagrams(String[] strs) {
  3.         HashMap<String, List<String>> map = new HashMap<>();
  4.         for (int i = 0; i < strs.length; i++) {
  5.             char[] str1 = strs[i].toCharArray();
  6.             Arrays.sort(str1);
  7.             if(map.containsKey(String.valueOf(str1))){
  8.                 List<String> list=map.get(String.valueOf(str1));
  9.                 list.add(strs[i]);
  10.                 map.put(String.valueOf(str1),list);
  11.             }
  12.             else{
  13.                 List<String> list=new ArrayList<>();
  14.                 list.add(strs[i]);
  15.                 map.put(String.valueOf(str1),list);
  16.             }
  17.         }
  18.         return new ArrayList<>(map.values());
  19.     }
  20. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

雁过留声

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表