当前位置: 首页 > 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/news/313940.html

相关文章:

  • 深度解析 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 入门一
  • 浪潮信息金风慧能:打造智慧新能源运营平台
  • DMA学习
  • 【pyVista】在三维模型中的网格属性
  • JavaScript发送邮件:实现前端触发的教程?
  • 【VitualBox】VitualBox的网络模式+网络配置
  • VuePress搭建文档网站/个人博客(详细配置)主题配置
  • 自动登录 RPA 的进阶:滑块验证的巧妙实现
  • 远程连接MySQL并操作
  • PostgreSQL JAVA与SQL集成之PL/Java
  • 科研绘图系列:R语言散点图和小提琴图(scatter plot violin plot)
  • 【ORACLE】客户端或plsql无法连接Oracle问题之一