当前位置: 首页 > article >正文

leetcode49字母异位词分组

思路一

知道要用hash,但是当时不知道怎么解决字符串的全排列。一个单词可以变成好多单词,我怎么对这些单词枚举呢。结果发现可以sort,那么字母一样的单词一定一样,然后将单词放到hashmap里面,凡是排完序一样的单词都放到一个队列里去。

代码一

class Solution {
   public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> map = new HashMap<>();
        for (String str:strs){
            String s1 = sortString(str);
            if (map.containsKey(s1)){
                map.get(s1).add(str);
            }else {
                List<String> list = new ArrayList<>();
                list.add(str);
                map.put(s1, list);
            }
        }
        List<List<String>> result = new ArrayList<>();
        for (Map.Entry<String, List<String>> entry : map.entrySet()){
            result.add(entry.getValue());
        }
        return result;
    }

    private String sortString(String str) {
        char[] chars = str.toCharArray();
        Arrays.sort(chars);
        return String.valueOf(chars);
    }

}

思路二

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> map = new HashMap<>();
        for (String str:strs){
               String s1 = stringToKey(str);
            if (map.containsKey(s1)){
                map.get(s1).add(str);
            }else {
                List<String> list = new ArrayList<>();
                list.add(str);
                map.put(s1, list);
            }
        }
        List<List<String>> result = new ArrayList<>();
        for (Map.Entry<String, List<String>> entry : map.entrySet()){
            result.add(entry.getValue());
        }
        return result;
    }

    private String stringToKey(String str) {
        char[] chars = str.toCharArray();
        int[] z = new int[26];
        for (char ch : chars){
            z[ch-97] ++;
        }
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < 26; i++) {
            if (z[i] != 0){
                stringBuilder.append((char)(i+97));
                stringBuilder.append(z[i]);
            }
        }
        return stringBuilder.toString();
    }

}

就是构建key
stringToKey就是想法构建一个key,如何把 abc acb cba 映射为相同的key,就是字母和出现的次数


http://www.kler.cn/a/313940.html

相关文章:

  • Mysql数据库里的SSH连接
  • 【大数据学习 | HBASE高级】rowkey的设计,hbase的预分区和压缩
  • MySQL与Oracle对比及区别
  • CentOS 服务
  • 【ChatGPT】 如何让ChatGPT分析数据并得出结论
  • 算法——二分查找(leetcode704)
  • 深度解析 MintRich 独特的价格曲线机制玩法
  • OpenGL 原生库5 变换
  • 从拥堵到畅通:HTTP/2 如何解决 Web 性能瓶颈?
  • 集合框架(一):Collection集合的遍历方式
  • Cypress初次安装启动常见问题
  • Element Plus 中Input输入框
  • JVM 内存管理详解
  • 宝塔面板FTP连接时“服务器发回了不可路由的地址。使用服务器地址代替。”
  • 共轭传热和浸没边界耦合相关的论文的阅读笔记
  • cesium效果不酷炫怎么办--增加渲染器
  • Redis五中数据类型的底层实现
  • nodejs+express+vue教辅课程辅助教学系统 43x2u前后端分离项目
  • mysql-死锁
  • EP16 自定义头部导航栏
  • ubuntu64位系统无法运行32位程序的解决办法
  • C++校招面经(二)
  • Sentinel组件学习
  • 力扣题解815
  • vue 入门一
  • 浪潮信息金风慧能:打造智慧新能源运营平台