1. 程式人生 > >JAVA程式碼—演算法基礎:字謎分組

JAVA程式碼—演算法基礎:字謎分組

字謎分組

問題描述:給定一個字串陣列,請將陣列中的元素進行分組。例如,給定字串陣列為: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],則返回結果為:
[
[“ate”, “eat”,”tea”],
[“nat”,”tan”],
[“bat”]
]
注意:所有的字串均為小寫字母。

分析:通過觀察給定的字串陣列,分析其每一個元素,和分析返回結果,可以發現能夠歸為一組的字串都有一個共同的特點:一組中包含相同的字元,並且一組中與字元的順序無關。

演算法設計:

package com.bean.algorithmbasic;

import
java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; public class GroupAnagramsDemo { /* * 對給定的字串陣列中的元素進行分組歸納 * */ public static List<List<String>> groupAnagrams(String[] strs) { if(strs==null
|| strs.length == 0){ return new ArrayList<List<String>>(); } HashMap<String, List<String>> map = new HashMap<String, List<String>>(); //Arrays.sort(strs); for (String s:strs) { char[] ca = s.toCharArray(); Arrays.sort(ca); String keyStr = String.valueOf(ca); if
(!map.containsKey(keyStr)) map.put(keyStr, new ArrayList<String>()); map.get(keyStr).add(s); } for(String key: map.keySet()) { Collections.sort(map.get(key)); } return new ArrayList<List<String>>(map.values()); } public static void main(String[] args) { // TODO Auto-generated method stub String[] strArray= {"ate", "eat","tea","nat","tan","bat"}; List<List<String>> resultList=groupAnagrams(strArray); for(List<String> ls:resultList) { System.out.println(ls); } } }

.(完)