Anagrams
来源:互联网 发布:人工智能未来猜想 编辑:程序博客网 时间:2024/06/18 01:29
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
首先简单介绍一下Anagram(回文构词法)。Anagrams是指由颠倒字母顺序组成的单词,比如“dormitory”颠倒字母顺序会变成“dirty room”,“tea”会变成“eat”。
回文构词法有一个特点:单词里的字母的种类和数目没有改变,只是改变了字母的排列顺序。
题目的意思是给一个String数组,找出其中由相同字母组成的单词。
例如:S = ["abc", "bca", "bac", "bbb", "bbca", "abcb"]
答案为:
["abc", "bca", "bac", "bbca", "abcb"]
只有"bbb"没有相同字母组成的单词。
思路:既然是相同字母生成的单词,那对单词里的字母排序,必然得到相同的结果。利用HashMap将排序的结果作为键,将第一次出现的单词在strs[]数组中的下标作为值,那么当下一个相同字母构成的单词出现的时候,将键值对的值修改成-1,标志值已经有重复的出现了,并将前2个都添加都list集合中,以后再出现相同的,根据查到的键值对的值为-1,直接加入到list即可。对于新出现的别的单词,依照上述过程即可。
代码如下:
public class Solution { public List<String> anagrams(String[] strs) { if(strs==null||strs.length==0) return null; List<String> list = new ArrayList<String>(); HashMap<String,Integer> map = new HashMap<String,Integer>(); for(int i=0;i<strs.length;i++) { char[] temp = strs[i].toCharArray(); Arrays.sort(temp); //将字母排序,作为识别的依据 String str = new String(temp); if(map.containsKey(str)) { int index=map.get(str); if(index!=-1){ //第二次出现,便可以添加到list中了 list.add(strs[index]); map.put(str,-1); } list.add(strs[i]); }else{ map.put(str,i); //第一次出现某种字母顺序的字符串,先放到map中保存,等待第二次的出现 } } return list; }}
0 0
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- Anagrams
- anagrams
- Anagrams
- Anagrams
- Anagrams
- 对CSDN的认识
- Java集合Map接口与Map.Entry学习
- UFLDL教程笔记及练习答案六(稀疏编码与稀疏编码自编码表达)
- 北大ACM1007——DNA Sorting
- 欢迎使用CSDN-markdown编辑器
- Anagrams
- PHP通过Thrift操作Hbase
- PB11.5上开发B/S需要预装哪些软件?
- Uva - 1597 - Searching the Web
- 九章算法面试题74 中位数
- Effective C++条款04解读:确定对象被使用之前已先被初始化
- Distinct Subsequences
- Python 各种IDE比较
- js正则表达式之exec方法讲解