leetCode 49.Anagrams (回文构词法) 解题思路和方法

AnagramsGiven an array of strings, return all groups of strings that are anagrams.

Note: All inputs will be in lower-case.

思路:这题要是解,必须知道什么是回文构词法。所谓回文构词法就是把一个单词的顺序调整,形成新的单词,如”eat“,"tea"就是回文构词法。

所以回文构词法一定是相同的字母不同的顺序,而且最少有两个单词。

本题是将单词排序之后运用set查看是否重复,来判断是否回文构词。具体代码如下:

public class Solution {public List<String> anagrams(String[] strs) {List<String> list = new ArrayList<String>();if(strs.length <= 1){return list;}Map<String,Integer> map = new HashMap<>();Set<String> set = new HashSet<>();boolean[] b = new boolean[strs.length];//为每个字符串标记,初始均为false//处理字符串,变成有序的字符数组for(int i = 0; i < strs.length;i++){char[] c = strs[i].toCharArray();Arrays.sort(c);StringBuffer sb = new StringBuffer();for(char k:c){sb.append(k);//将char数组转换成字符串}if(!set.add(sb.toString())){//里面已经存在相同的字符数组list.add(strs[i]);int index = map.get(sb.toString());if(!b[index]){//还没有添加到listlist.add(strs[index]);b[index] = true;//将标记置为true,}}else{map.put(sb.toString(),i);//保存首次出现的字符串的索引iset.add(sb.toString());//保存set,下次判断是否重复}}return list;}}本题在开始写的代码很繁琐,如下,作为参考,没有用set判断,所以很繁琐,效率也不高。

public class Solution {public List<String> anagrams(String[] strs) {List<String> list = new ArrayList<String>();if(strs.length <= 1){return list;}Map<Integer,char[]> map = new HashMap<>();//处理字符串,变成有序的字符数组for(int i = 0; i < strs.length;i++){char[] c = strs[i].toCharArray();Arrays.sort(c);//排序map.put(i, c);}boolean[] b = new boolean[strs.length];//为每个字符串标记,初始均为falsefor(int k = 0; k < strs.length -1 ; k++){if(!b[k]){//没有被标记char[] c0 = map.get(k);//假定第k个字符串是回文构词for(int i = k + 1; i < strs.length;i++){//从i=1开始if(!b[i] && c0.length == strs[i].length()){//没有被判断是,且与c0字符数相等char[] c1 = map.get(i);//数组化int j = 0;while( j < c0.length){if(c0[j] != c1[j]){break;//如果不相同直接break}else{j++;//相同+1}}if(j == c0.length){//说明字全部相同list.add(strs[i]);b[k] = true;//开始那个也要标记b[i] = true;//标记已是}}}if(b[k]){//如果初始已标记,,则在list加上list.add(strs[k]);}}}return list;}}

版权声明:本文为博主原创文章,未经博主允许不得转载。

也许不是自己该去发挥的地方,还是让自己到最适合自己战斗的方面去吧!勇敢的接受自己的失败,

leetCode 49.Anagrams (回文构词法) 解题思路和方法

相关文章:

你感兴趣的文章:

标签云: