Anagram word search problem
import java.util.*;
class AnagramWordSearch {
private static Set<String> dictionarySet;
private static Map<String, Set<String>> anagramMap;
static {
//Not optimal to load every time would want to cache the anagramMap
dictionarySet = loadDictionary();
anagramMap = buildWordMatchMap();
}
public static Set<String> loadDictionary(){
dictionarySet = new HashSet<>(Arrays.asList("may", "student","students","dog","studentssess","god", "cat", "act", "tab", "bat", "flow","wolf", "lambs","amy", "yam", "balms", "looped", "poodle"));
return dictionarySet;
}
public static Map<String, Set<String>> buildWordMatchMap(){
anagramMap = new HashMap<>();
for (String dictionaryWord : dictionarySet){
char[] chars = dictionaryWord.toCharArray();
Arrays.sort(chars);
String sortDictionaryWord = new String(chars);
if (anagramMap.containsKey(sortDictionaryWord)){
Set<String> existingWordMatch = anagramMap.get(sortDictionaryWord);
existingWordMatch.add(dictionaryWord);
anagramMap.put(sortDictionaryWord, existingWordMatch);
} else {
Set<String> newWordMatchSet = new HashSet<>(Arrays.asList(dictionaryWord));
anagramMap.put(sortDictionaryWord, newWordMatchSet);
}
}
return anagramMap;
}
public static Set<String> getWordsWithSameChars(String word){
char[] wordChars = word.toCharArray();
Arrays.sort(wordChars);
String sortedWord = new String(wordChars);
return anagramMap.get(sortedWord);
}
public static void main(String[] args) {
Set<String> wordMatchSameChars = getWordsWithSameChars("cat");
System.out.println(wordMatchSameChars); //cat, act
}
}
Get derivative for Term
import java.util.*;
class Derivate {
public static List<Term> getDerivative(List<Term> polynomials){
List<Term> derivativeTerm = new ArrayList<>();
for (Term polynomial : polynomials){
int expVal = polynomial.getExponent();
if (expVal>0){
Term newTerm = new Term(polynomial.getCoefficient() * expVal, expVal-1);
derivativeTerm.add(newTerm);
}
}
return derivativeTerm;
}
public static void main(String[] args) {
List<Term> terms = new ArrayList<>(Arrays.asList(new Term(3, 2), new Term(5, 1), new Term(9, 0)));
System.out.println(getDerivative(terms)); //[{6, 1}, {5, 0}]
}
public static class Term {
private int exponent;
private int coefficient;
public Term(int coefficient, int exponent){
this.exponent = exponent;
this.coefficient = coefficient;
}
public int getCoefficient(){
return coefficient;
}
public void setCoefficient(int coefficient){
this.coefficient = coefficient;
}
public int getExponent(){
return exponent;
}
public void setExponent(int exponent){
this.exponent = exponent;
}
public String toString(){
return "{" + coefficient + ", " + exponent + "}";
}
}
}
Non Consecutive sequence with the largest sum
import java.util.*;
class HighestSumOfNonConsecutiveValues {
public static Integer setOfConsecutiveElements(int[] intArr){
Set<Integer> setOfValues = new HashSet<>();
for (int k = 0; k < intArr.length;k++){
setOfValues.add(intArr[k]);
}
Integer largestSum = 0;
for (Integer setOfValue : setOfValues){
Integer iteratorSum = setOfValue;
for (Integer k = 1; k < setOfValues.size();k++){
if (setOfValues.contains(setOfValue+k)){
iteratorSum += (setOfValue+k);
} else if ((setOfValues.contains(setOfValue-k))){
iteratorSum += (setOfValue-k);
} else {
break;
}
}
if (largestSum < iteratorSum){
largestSum = iteratorSum;
}
}
return largestSum;
}
public static void main(String[] args) {
int[] arr = new int[]{1,3,5,6,12,11,62,7,101,102,41,37,2,52,2,31,5,69,71,32,33,7,100,11,4};
System.out.println(setOfConsecutiveElements(arr)); //303 (100+101+102)
}
}
Ransome note
public class Solution {
private static final String YES = "Yes";
private static final String NO = "No";
static void checkMagazine(String[] magazine, String[] note) {
Map<String, Integer> notesMap = new HashMap<>();
for (String n : note){
if (notesMap.containsKey(n)){
Integer wordFreq = notesMap.get(n) + 1;
notesMap.put(n, wordFreq);
} else {
notesMap.put(n, 1);
}
}
for (String m : magazine){
if (notesMap.containsKey(m)){
Integer currentFreq = notesMap.get(m);
if (1 < currentFreq){
currentFreq-=1;
notesMap.put(m, currentFreq);
} else {
notesMap.remove(m);
if (notesMap.isEmpty()){
break;
}
}
}
}
String foundAllWordsInMagazine = YES;
if (!notesMap.isEmpty()){
foundAllWordsInMagazine = NO;
}
System.out.println(foundAllWordsInMagazine);
}
}