From ff05d94a3adf304baa039fa957abe879fe53a4e5 Mon Sep 17 00:00:00 2001 From: Will Date: Sat, 8 Oct 2016 19:47:16 -0400 Subject: [PATCH 1/4] Ensuring packages are properly cased (i.e. all lower, Java convention) --- .gitignore | 2 ++ src/{TechInterview => techinterview}/ArrayList.java | 2 +- src/{TechInterview => techinterview}/BinarySearch.java | 2 +- src/{TechInterview => techinterview}/BinarySearchTree.java | 3 +-- src/{TechInterview => techinterview}/DoublyLinkedList.java | 2 +- src/{TechInterview => techinterview}/HashTable.java | 2 +- src/{TechInterview => techinterview}/MergeSort.java | 2 +- src/{TechInterview => techinterview}/Queue.java | 2 +- src/{TechInterview => techinterview}/QuickSort.java | 2 +- src/{TechInterview => techinterview}/SingletonDesign.java | 2 +- src/{TechInterview => techinterview}/SinglyLinkedList.java | 2 +- src/{TechInterview => techinterview}/StackArray.java | 2 +- src/{TechInterview => techinterview}/StackLinkedList.java | 2 +- src/{TechInterview => techinterview}/Test.java | 2 +- src/{TechInterview => techinterview}/Trie.java | 2 +- src/{TechInterview => techinterview}/Vector.java | 2 +- 16 files changed, 17 insertions(+), 16 deletions(-) create mode 100644 .gitignore rename src/{TechInterview => techinterview}/ArrayList.java (98%) rename src/{TechInterview => techinterview}/BinarySearch.java (96%) rename src/{TechInterview => techinterview}/BinarySearchTree.java (99%) rename src/{TechInterview => techinterview}/DoublyLinkedList.java (98%) rename src/{TechInterview => techinterview}/HashTable.java (98%) rename src/{TechInterview => techinterview}/MergeSort.java (98%) rename src/{TechInterview => techinterview}/Queue.java (98%) rename src/{TechInterview => techinterview}/QuickSort.java (98%) rename src/{TechInterview => techinterview}/SingletonDesign.java (95%) rename src/{TechInterview => techinterview}/SinglyLinkedList.java (99%) rename src/{TechInterview => techinterview}/StackArray.java (97%) rename src/{TechInterview => techinterview}/StackLinkedList.java (98%) rename src/{TechInterview => techinterview}/Test.java (95%) rename src/{TechInterview => techinterview}/Trie.java (99%) rename src/{TechInterview => techinterview}/Vector.java (98%) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..29b636a --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.idea +*.iml \ No newline at end of file diff --git a/src/TechInterview/ArrayList.java b/src/techinterview/ArrayList.java similarity index 98% rename from src/TechInterview/ArrayList.java rename to src/techinterview/ArrayList.java index cf72b62..b568dad 100644 --- a/src/TechInterview/ArrayList.java +++ b/src/techinterview/ArrayList.java @@ -1,4 +1,4 @@ -package TechInterview; +package techinterview; import java.util.Arrays; diff --git a/src/TechInterview/BinarySearch.java b/src/techinterview/BinarySearch.java similarity index 96% rename from src/TechInterview/BinarySearch.java rename to src/techinterview/BinarySearch.java index 380a557..08737b6 100644 --- a/src/TechInterview/BinarySearch.java +++ b/src/techinterview/BinarySearch.java @@ -1,4 +1,4 @@ -package TechInterview; +package techinterview; public class BinarySearch { diff --git a/src/TechInterview/BinarySearchTree.java b/src/techinterview/BinarySearchTree.java similarity index 99% rename from src/TechInterview/BinarySearchTree.java rename to src/techinterview/BinarySearchTree.java index a1524ad..1714654 100644 --- a/src/TechInterview/BinarySearchTree.java +++ b/src/techinterview/BinarySearchTree.java @@ -1,8 +1,7 @@ -package TechInterview; +package techinterview; import java.util.LinkedList; import java.util.Queue; -import java.util.Stack; public class BinarySearchTree { diff --git a/src/TechInterview/DoublyLinkedList.java b/src/techinterview/DoublyLinkedList.java similarity index 98% rename from src/TechInterview/DoublyLinkedList.java rename to src/techinterview/DoublyLinkedList.java index d62d03e..a47685e 100644 --- a/src/TechInterview/DoublyLinkedList.java +++ b/src/techinterview/DoublyLinkedList.java @@ -1,4 +1,4 @@ -package TechInterview; +package techinterview; public class DoublyLinkedList { diff --git a/src/TechInterview/HashTable.java b/src/techinterview/HashTable.java similarity index 98% rename from src/TechInterview/HashTable.java rename to src/techinterview/HashTable.java index d2b90a1..43dbcca 100644 --- a/src/TechInterview/HashTable.java +++ b/src/techinterview/HashTable.java @@ -1,4 +1,4 @@ -package TechInterview; +package techinterview; public class HashTable { diff --git a/src/TechInterview/MergeSort.java b/src/techinterview/MergeSort.java similarity index 98% rename from src/TechInterview/MergeSort.java rename to src/techinterview/MergeSort.java index 5f7dd5b..686e5fe 100644 --- a/src/TechInterview/MergeSort.java +++ b/src/techinterview/MergeSort.java @@ -1,4 +1,4 @@ -package TechInterview; +package techinterview; import java.util.Arrays; diff --git a/src/TechInterview/Queue.java b/src/techinterview/Queue.java similarity index 98% rename from src/TechInterview/Queue.java rename to src/techinterview/Queue.java index 4c8953a..61213cb 100644 --- a/src/TechInterview/Queue.java +++ b/src/techinterview/Queue.java @@ -1,4 +1,4 @@ -package TechInterview; +package techinterview; public class Queue { diff --git a/src/TechInterview/QuickSort.java b/src/techinterview/QuickSort.java similarity index 98% rename from src/TechInterview/QuickSort.java rename to src/techinterview/QuickSort.java index 5378487..95ce650 100644 --- a/src/TechInterview/QuickSort.java +++ b/src/techinterview/QuickSort.java @@ -1,4 +1,4 @@ -package TechInterview; +package techinterview; import java.util.Arrays; diff --git a/src/TechInterview/SingletonDesign.java b/src/techinterview/SingletonDesign.java similarity index 95% rename from src/TechInterview/SingletonDesign.java rename to src/techinterview/SingletonDesign.java index 69941a3..7b4b8c6 100644 --- a/src/TechInterview/SingletonDesign.java +++ b/src/techinterview/SingletonDesign.java @@ -1,4 +1,4 @@ -package TechInterview; +package techinterview; public class SingletonDesign { diff --git a/src/TechInterview/SinglyLinkedList.java b/src/techinterview/SinglyLinkedList.java similarity index 99% rename from src/TechInterview/SinglyLinkedList.java rename to src/techinterview/SinglyLinkedList.java index 1e35c9f..c337a20 100644 --- a/src/TechInterview/SinglyLinkedList.java +++ b/src/techinterview/SinglyLinkedList.java @@ -1,4 +1,4 @@ -package TechInterview; +package techinterview; public class SinglyLinkedList { diff --git a/src/TechInterview/StackArray.java b/src/techinterview/StackArray.java similarity index 97% rename from src/TechInterview/StackArray.java rename to src/techinterview/StackArray.java index 322b41a..0b3f009 100644 --- a/src/TechInterview/StackArray.java +++ b/src/techinterview/StackArray.java @@ -1,4 +1,4 @@ -package TechInterview; +package techinterview; public class StackArray { diff --git a/src/TechInterview/StackLinkedList.java b/src/techinterview/StackLinkedList.java similarity index 98% rename from src/TechInterview/StackLinkedList.java rename to src/techinterview/StackLinkedList.java index 7efb6a2..b053482 100644 --- a/src/TechInterview/StackLinkedList.java +++ b/src/techinterview/StackLinkedList.java @@ -1,4 +1,4 @@ -package TechInterview; +package techinterview; public class StackLinkedList { diff --git a/src/TechInterview/Test.java b/src/techinterview/Test.java similarity index 95% rename from src/TechInterview/Test.java rename to src/techinterview/Test.java index 1f0af4e..e0637ed 100644 --- a/src/TechInterview/Test.java +++ b/src/techinterview/Test.java @@ -1,4 +1,4 @@ -package TechInterview; +package techinterview; public class Test { diff --git a/src/TechInterview/Trie.java b/src/techinterview/Trie.java similarity index 99% rename from src/TechInterview/Trie.java rename to src/techinterview/Trie.java index 42cf9e1..3462873 100644 --- a/src/TechInterview/Trie.java +++ b/src/techinterview/Trie.java @@ -1,4 +1,4 @@ -package TechInterview; +package techinterview; import java.util.HashMap; diff --git a/src/TechInterview/Vector.java b/src/techinterview/Vector.java similarity index 98% rename from src/TechInterview/Vector.java rename to src/techinterview/Vector.java index b212f9c..c3b831d 100644 --- a/src/TechInterview/Vector.java +++ b/src/techinterview/Vector.java @@ -1,4 +1,4 @@ -package TechInterview; +package techinterview; import java.util.Arrays; From 1791d1ae071380a3b3c9fa07259bffa32ad0412d Mon Sep 17 00:00:00 2001 From: Will Date: Sat, 8 Oct 2016 20:41:19 -0400 Subject: [PATCH 2/4] Adding solution for find the Anagrams interview question --- .gitignore | 3 +- src/techinterview/Anagram.java | 56 +++++++++++++++++++++++++ test/src/techinterview/AnagramTest.java | 24 +++++++++++ 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 src/techinterview/Anagram.java create mode 100644 test/src/techinterview/AnagramTest.java diff --git a/.gitignore b/.gitignore index 29b636a..ebbd59a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea -*.iml \ No newline at end of file +*.iml +out \ No newline at end of file diff --git a/src/techinterview/Anagram.java b/src/techinterview/Anagram.java new file mode 100644 index 0000000..e6645c4 --- /dev/null +++ b/src/techinterview/Anagram.java @@ -0,0 +1,56 @@ +package techinterview; + +import java.util.*; +import java.util.ArrayList; + +/** + * Anagram Interview Question: + * + * Typically posed as follows: + * + * Given a word, and a "dictionary" find all anagrams of the given word (i.e. words which use all the same letters + * as the given word but in a different order.) + */ +public class Anagram { + private Map> anagramsByKey = new HashMap<>(); + + public Collection findAll(String word, Collection dictionary) { + preprocess(word, dictionary); + + Collection anagrams = anagramsByKey.get(generateKey(word)); + + if (anagrams == null) { + anagrams = new HashSet<>(); + } + + return anagrams; + } + + private void preprocess(String word, Collection dictionary) { + dictionary.stream().filter(entry -> !word.equals(entry)).forEach(entry -> { + String key = generateKey(entry); + + if (!anagramsByKey.containsKey(key)) { + anagramsByKey.put(key, new HashSet<>()); + } + + anagramsByKey.get(key).add(entry); + }); + } + + private String generateKey(String entry) { + List characters = new ArrayList<>(); + + for (char c : entry.toCharArray()) { + characters.add(c); + } + + Collections.sort(characters); + + StringBuilder keySb = new StringBuilder(); + characters.forEach(keySb::append); + + return keySb.toString(); + } + +} diff --git a/test/src/techinterview/AnagramTest.java b/test/src/techinterview/AnagramTest.java new file mode 100644 index 0000000..819424d --- /dev/null +++ b/test/src/techinterview/AnagramTest.java @@ -0,0 +1,24 @@ +package techinterview; + +import org.junit.Test; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; + +import static org.junit.Assert.assertEquals; + +public class AnagramTest { + + @Test + public void testFindsAnagrams() throws Exception { + Collection anagrams = new Anagram().findAll("baste", Arrays.asList("abets", "baste", "betas", "beast", "beats")); + assertEquals(4, anagrams.size()); + } + + @Test + public void testEmptyDictionaryFindsNoAnagrams() throws Exception { + Collection anagrams = new Anagram().findAll("baste", Collections.emptyList()); + assertEquals(0, anagrams.size()); + } +} \ No newline at end of file From 789694ee354e868b9e06bab0e160a8f5b0eb4212 Mon Sep 17 00:00:00 2001 From: Will Date: Sat, 8 Oct 2016 20:52:47 -0400 Subject: [PATCH 3/4] Adding solution for isPalindrome --- src/techinterview/Palindrome.java | 25 ++++++++++++++++ test/src/techinterview/PalindromeTest.java | 34 ++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 src/techinterview/Palindrome.java create mode 100644 test/src/techinterview/PalindromeTest.java diff --git a/src/techinterview/Palindrome.java b/src/techinterview/Palindrome.java new file mode 100644 index 0000000..51d40a3 --- /dev/null +++ b/src/techinterview/Palindrome.java @@ -0,0 +1,25 @@ +package techinterview; + +/** + * Created by will on 10/8/16. + */ +public class Palindrome { + public static boolean is(String word) { + if (word == null) { + throw new IllegalArgumentException("Invalid argument 'null'."); + } + + int i = 0, j = word.length() - 1; + + while (i <= j) { + if (word.charAt(i) != word.charAt(j)) { + return false; + } + + ++i; + --j; + } + + return true; + } +} diff --git a/test/src/techinterview/PalindromeTest.java b/test/src/techinterview/PalindromeTest.java new file mode 100644 index 0000000..df2da6b --- /dev/null +++ b/test/src/techinterview/PalindromeTest.java @@ -0,0 +1,34 @@ +package techinterview; + +import org.junit.Test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +/** + * Created by will on 10/8/16. + */ +public class PalindromeTest { + + @Test + public void testIsPalindrome() throws Exception { + assertTrue(Palindrome.is("racecar")); + assertFalse(Palindrome.is("race")); + assertTrue(Palindrome.is("mom")); + } + + @Test + public void testEmptyStringIsPalindrome() throws Exception { + assertTrue(Palindrome.is("")); + } + + @Test + public void testSingleLetterIsPalindrome() throws Exception { + assertTrue(Palindrome.is("a")); + } + + @Test(expected = IllegalArgumentException.class) + public void testNullThrowsIllegalArgumentException() throws Exception { + Palindrome.is(null); + } +} \ No newline at end of file From c08f2f5b3ee75b737e369251a636d83aaf07defc Mon Sep 17 00:00:00 2001 From: Will Date: Sun, 9 Oct 2016 06:15:20 -0400 Subject: [PATCH 4/4] Removing autogenerated class headers --- src/techinterview/Palindrome.java | 3 --- test/src/techinterview/PalindromeTest.java | 3 --- 2 files changed, 6 deletions(-) diff --git a/src/techinterview/Palindrome.java b/src/techinterview/Palindrome.java index 51d40a3..d878c05 100644 --- a/src/techinterview/Palindrome.java +++ b/src/techinterview/Palindrome.java @@ -1,8 +1,5 @@ package techinterview; -/** - * Created by will on 10/8/16. - */ public class Palindrome { public static boolean is(String word) { if (word == null) { diff --git a/test/src/techinterview/PalindromeTest.java b/test/src/techinterview/PalindromeTest.java index df2da6b..7ecae62 100644 --- a/test/src/techinterview/PalindromeTest.java +++ b/test/src/techinterview/PalindromeTest.java @@ -5,9 +5,6 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -/** - * Created by will on 10/8/16. - */ public class PalindromeTest { @Test