zoukankan      html  css  js  c++  java
  • [leedcode 49] Anagrams

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

    Note: All inputs will be in lower-case.

    public class Solution {
        public List<String> anagrams(String[] strs) {
            //Anagram(回文构词法)是指打乱字母顺序从而得到新的单词,比如 "dormitory" 打乱字母顺 
            //序会变成 "dirty room" , "tea" 会变成"eat"。 
            //回文构词法有一个特点:单词里的字母的种类和数目没有改变,只是改变了字母的排列顺序。 
            //因此,将几个单词按照字母顺序排序后,若它们相等,则它们属于同一组 anagrams 。
            //解题思路:本文借用HashMap<String,Integer>数据结构,key保存的是排完序的字符串,value代表该字符串的索引值。
            //遍历一个字符串,排序后,如果该字符串已经存在,则保存结果,注意为了防止重复添加,当添加第二个时,需要将value置-1
            //一遍出现大于2个字符串时,不会重复。
            //注意ArraySort(char[]),参数必须是char[],注释部分不能少
            List<String> res=new ArrayList<String>();
            HashMap<String ,Integer> map=new HashMap<String,Integer>();
            for(int i=0;i<strs.length;i++){
                char[] tmp=strs[i].toCharArray();
                Arrays.sort(tmp);//不能少,不能写成Arrays.sort(tmp.toCharArray())
                String temp=new String(tmp);//不能少,输入“”时
                if(map.containsKey(temp)){
                    res.add(strs[i]);
                    if(map.get(temp)!=-1){
                         res.add(strs[map.get(temp)]);
                         map.put(temp,-1);
                    }
                }else{
                    map.put(temp,i);
                }
            }
            return res;
        }
    }
  • 相关阅读:
    06 继承与多态
    动手动脑 4 String 类
    字串加密
    课后作业(查询类对象创建个数)
    动手动脑 3 类与对象
    动手动脑 (第二次)
    IOS 网络判断
    ios常用的几个动画代码
    iOS Get方式带中文不能请求网络
    UILabel Text 加下划线
  • 原文地址:https://www.cnblogs.com/qiaomu/p/4640889.html
Copyright © 2011-2022 走看看