Anagrams
来源:互联网 发布:java 可视化 编辑:程序博客网 时间:2024/05/16 09:51
问题描述
Given an array of strings, return all groups of strings that are anagrams.
即回文构词法
For example:
Input: [“tea”,”and”,”ate”,”eat”,”den”]
Output: [“tea”,”ate”,”eat”]
思考:怎么才能把一个单词的各个字母不按顺序比较
想法1: 排序
- 把str转换成char[],然后排序,利用已排序的char[],生成新的newStr,设置为key;
- 把key和原str放到oriMap中,并记录返回值。
- 如果map的返回值不为空,则表示之前存有相同key的value,放入result中(map的put会返回旧的value值),并将key和新value放入pairMap中(记录最后一次具有相同key的str);
想法2: 哈希表
- 但是哈希表比较难支持重复字母
想法3:利用数组当作key
基本与想法一一致,不过用int[26]计算str中每个单词出现的次数。
代码省略
代码:
想法一:
public class Solution { public List<String> anagrams(String[] strs) { Map<String, String> ori = new HashMap<>(); List<String> list = new LinkedList<>(); Map<String, String> pair = new HashMap<>(); for(String str:strs){ char[] chs = str.toCharArray(); Arrays.sort(chs); String key = new String(chs); String oriStr = ori.put(key, str); if(oriStr != null){ list.add(oriStr); pair.put(key,str); //只保留最后一个; } } list.addAll(pair.values()); return list; }}
0 0
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- anagrams
- Anagrams
- Anagrams
- Anagrams
- python实现分割文件
- Android学习笔记之GridView(2)
- java实现简单的单点登录
- Java_集合操作_不同的列表选择不同的遍历方法
- “函数声明”、“函数原型”与“函数定义”辨析
- Anagrams
- 详细描述用maven构建Struts2项目
- 详解安卓Fragment(碎片化)
- Gradle的文件编码设置
- Singleton模式的例子
- Win8 Metro(C#)数字图像处理--2.35图像肤色检测算法
- 牌型种数 ----蓝桥杯(暴力方法)
- vim 安装vim-go 打造GOLANG 专用IDE
- [C/C++]链表的连接