本文共 1310 字,大约阅读时间需要 4 分钟。
问题描述:给定一个字符串数组,请将数组中的元素进行分组。例如,给定字符串数组为: [“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
> groupAnagrams(String[] strs) { if(strs==null || strs.length == 0){ return new ArrayList
>(); } HashMap > map = new HashMap >(); //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 ()); map.get(keyStr).add(s); } for(String key: map.keySet()) { Collections.sort(map.get(key)); } return new ArrayList
>(map.values()); } public static void main(String[] args) { // TODO Auto-generated method stub String[] strArray= { "ate", "eat","tea","nat","tan","bat"}; List
> resultList=groupAnagrams(strArray); for(List ls:resultList) { System.out.println(ls); } }}
.(完)
转载地址:http://ngvdi.baihongyu.com/