5 Nisan 2020 Pazar

Anagrams Gruplama



https://leetcode.com/explore/challenge/card/30-day-leetcoding-challenge/528/week-1/3288/

>> Solution 1 :

--
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class GroupAnagrams {
public static void main(String[] args) {
GroupAnagrams problem = new GroupAnagrams();
List<List<String>> result1 = problem.groupAnagrams(new String[] { "eat", "tea", "tan", "ate", "nat", "bat" });
System.out.println("Expected: 6, \n"
+ "Result: " + result1);
}
private static final char PRIMES[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181,
191, 193, 197, 199 };
public List<List<String>> groupAnagrams(String[] wordsArray) {
Map<Integer, List<String>> anagramWords = new HashMap<>();
for (String word : wordsArray) {
Integer key = calculateKey(word);
List<String> wordList = anagramWords.get(key);
if (wordList == null) {
wordList = new ArrayList<String>();
anagramWords.put(key, wordList);
}
wordList.add(word);
}
// return anagramWords.values().stream().collect(Collectors.toCollection(ArrayList::new));
return anagramWords.values().stream().collect(Collectors.toList());
}
private Integer calculateKey(String word) {
// We know word is all lowercase. Otherwise we can convert it to lowercase.
// word = word.toLowerCase();
int key = 1;
for (char letter : word.toCharArray()) {
key *= PRIMES[letter - 'a'];
}
return key;
}
}
--





>> Solution 2 :


--
import java.util.*;
import java.util.stream.*;
import static java.util.stream.Collectors.*;
class GroupAnagrams2 {
public List<List<String>> groupAnagrams(String[] wordsArray) {
Map<String,List<String>> anagramWords = new HashMap<>();
for(String word : wordsArray) {
String key = calculateKey(word);
List<String> wordList = anagramWords.get(key);
if(wordList == null) {
wordList = new ArrayList<String>();
anagramWords.put(key, wordList);
}
wordList.add(word);
}
return anagramWords.values().stream().collect(Collectors.toList());
}
private String calculateKey(String word) {
// We know word is all lowercase. Otherwise we can convert it to lowercase.
// word = word.toLowerCase();
char [] sortedChars = word.toCharArray();
Arrays.sort(sortedChars);
return new String(sortedChars);
}
}
--

Hiç yorum yok: