您的位置:首页 > 编程语言 > Java开发

「LintCode」java字符串練習四──anagrams

2015-09-17 03:17 477 查看
乱序字符串

给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中

样例

对于字符串数组 [“lint”,”intl”,”inlt”,”code”]

返回 [“lint”,”inlt”,”intl”]

注意

所有的字符串都只包含小写字母

我的解決方法

1.新建一個ArrayList數組,保存待會篩選出來的臨時數據并輸出;
2.遍歷字符串,獲得哈希計數器;
3.把哈希表中數值大於1的value取出來;

代碼

public static List<String> anagrams(String[] strs) {
// write your code here
ArrayList<String> result = new ArrayList<String>();
//哈希表
Map<String, ArrayList<String>> multimap = new HashMap<String, ArrayList<String>>();
for (String str : strs) {
char[] charArray = str.toCharArray();
Arrays.sort(charArray);
String strSorted = String.valueOf(charArray);
if (!multimap.containsKey(strSorted)) {
ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add(str);
multimap.put(strSorted, arrayList);
} else {
ArrayList<String> arrayList = multimap.get(strSorted);
arrayList.add(str);
multimap.put(strSorted, arrayList);
}
}
// System.out.print(multimap.values());

for (ArrayList<String> tmpArrayList : multimap.values()) {
if (tmpArrayList.size() > 1) {
result.addAll(tmpArrayList);
}
}
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: