インタビューの質問10.02。活用句-ハッシュテーブル、文字列

面接の質問10.02。活用句

タイトル説明

文字列の配列を並べ替え、すべてのアナグラムをグループ化するメソッドを記述します。アナグラムは、同じ文字で配置が異なる文字列です。

注:この質問は、元の質問から少し変更されています

例:

入力:[“ eat”、“ tea”、“ tan”、“ ate”、“ nat”、“ bat”]、
出力:

[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]

問題解決のアイデア

主に2つの部分があります。

1.活用を判断する方法は?

  • 文字列をソートし、文字をazAZの順序で並べ替えます。

2.活用を分類する方法は?

  • ハッシュテーブルを使用して、アナグラムを同じリストに入れます。
  • 最後に、リストに変換して返すことができます。

import java.util.*;

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    
    
    /**
     * 主要是两个部分:
     *
     * 1、如何判断变位词?
     * 对字符串进行排序,将字符按照azAZ的顺序排列。
     *
     * 2、如何归类变位词?
     * 使用散列表,将变位词放到同一个列表中。
     * 最后转化为列表返回即可。
     *
     * @param strs
     * @return
     */
    public List<List<String>> groupAnagrams(String[] strs) {
    
    
        //新建hash表,对变位词统计到一起
        HashMap<String , LinkedList<String>> map = new HashMap<String, LinkedList<String>>();
        //逐个访问字符串,归入同类变位词,不存在则新增
        for (String s : strs) {
    
    
            String key = sortChar(s);
            if (!map.containsKey(key)){
    
    
                map.put(key,new LinkedList<>());
            }
            LinkedList<String> tmp = map.get(key);
            tmp.push(s);
        }
        List<List<String>> res = new LinkedList<>();
        for (String key : map.keySet()) {
    
    
            res.add(map.get(key));
        }
        return res;
    }

    private String sortChar(String s) {
    
    
        char[] chars = s.toCharArray();
        Arrays.sort(chars);
        return new String(chars);
    }
}
//leetcode submit region end(Prohibit modification and deletion)

おすすめ

転載: blog.csdn.net/qq_35655602/article/details/115272669
おすすめ