Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.16 KB | None | 0 0
  1. import java.util.Arrays;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4.  
  5. public class Solutions {
  6.  
  7. private static boolean isPalindrome(String input) {
  8. int left = 0;
  9. int right = input.length() - 1;
  10. while(right > left) {
  11. if(input.charAt(left) != input.charAt(right)) {
  12. return false;
  13. }
  14. left++;
  15. right--;
  16. }
  17. return true;
  18. }
  19.  
  20. private static String longestPalindromeSubstring(String input) {
  21. String ans = "";
  22. int length = input.length();
  23. int low; int high;
  24. for(int i = 0; i<length; i++) {
  25. low = i;
  26. high = i;
  27. while((high + 1) < length && input.charAt(high + 1) == input.charAt(low)) {
  28. high++;
  29. }
  30. while((low - 1) >= 0 && (high + 1) < length && input.charAt(low - 1) == input.charAt(high + 1)) {
  31. low--;
  32. high++;
  33. }
  34. int currentLength = high - low + 1;
  35. int maxLength = ans.length();
  36. if(currentLength > maxLength) {
  37. ans = input.substring(low, high+1);
  38. }
  39. }
  40. return ans;
  41. }
  42.  
  43. private static int[] merge(int[] list1, int[] list2) {
  44. int[] ans = new int[list1.length + list2.length];
  45. int current = 0;
  46. int point1 = 0;
  47. int point2 = 0;
  48. while(point1 < list1.length && point2 < list2.length) {
  49. int first = list1[point1];
  50. int second = list2[point2];
  51. if(first > second) {
  52. point2++;
  53. ans[current] = second;
  54. } else {
  55. point1++;
  56. ans[current] = first;
  57. }
  58. current++;
  59. }
  60. while(point1 < list1.length) {
  61. ans[current] = list1[point1];
  62. current++;
  63. point1++;
  64. }
  65. while(point2 < list2.length) {
  66. ans[current] = list2[point2];
  67. current++;
  68. point2++;
  69. }
  70. return ans;
  71. }
  72.  
  73. private static boolean isomorphic(String string1, String string2) {
  74. if(string1.length() != string2.length()) { return false; }
  75. Map<Character, Character> mapping = new HashMap<>();
  76. for(int i = 0; i<string1.length(); i++) {
  77. Character first = string1.charAt(i);
  78. Character second = string2.charAt(i);
  79. if(mapping.containsKey(first)){
  80. if(mapping.get(first).equals(second)) { continue; }
  81. else { return false; }
  82. } else {
  83. if(mapping.containsValue(second)) {
  84. return false;
  85. }
  86. mapping.put(first, second);
  87. }
  88. }
  89. return true;
  90. }
  91.  
  92. private static int twoSum(int[] input, int sum) {
  93. Map<Integer, Integer> complements = new HashMap<>();
  94. int sums = 0;
  95. for(int element: input) {
  96. int complement = sum - element;
  97. if(complements.containsKey(complement)) {
  98. sums += complements.get(complement);
  99. }
  100. Integer previous = complements.getOrDefault(element, 0);
  101. previous++;
  102. complements.put(element, previous);
  103. }
  104. return sums;
  105. }
  106.  
  107. private static int twoSumForThreeSum(int[] input, int sum, int avoidIndex) {
  108. Map<Integer, Integer> complements = new HashMap<>();
  109. int sums = 0;
  110. for(int i = 0; i<input.length; i++) {
  111. if(i == avoidIndex) { continue; }
  112. int element = input[i];
  113. int complement = sum - element;
  114. if(complements.containsKey(complement)) {
  115. sums += complements.get(complement);
  116. }
  117. Integer previous = complements.getOrDefault(element, 0);
  118. previous++;
  119. complements.put(element, previous);
  120. }
  121. return sums;
  122. }
  123.  
  124. private static boolean threeSum(int[] input) {
  125. boolean completed = false;
  126. for(int i = 0; i<input.length; i++) {
  127. if(twoSumForThreeSum(input, -input[i], i) != 0) {
  128. completed = true;
  129. }
  130. }
  131. return completed;
  132. }
  133.  
  134. private static String shortestSubstring(String input, String chars) {
  135. Map<Character, Integer> mapping = new HashMap<>();
  136. int inputLength = input.length();
  137. int totalChars = chars.length();
  138. int low = 0;
  139. int foundChars = 0;
  140. int minStart = 0;
  141. int minLength = inputLength;
  142. for(int i = 0; i<chars.length(); i++) {
  143. Character c = chars.charAt(i);
  144. Integer previous = mapping.getOrDefault(c, 0);
  145. previous++;
  146. mapping.put(c, previous);
  147. }
  148. for(int i = 0; i<inputLength; i++) {
  149. Character c = input.charAt(i);
  150. if(mapping.containsKey(c)){
  151. if(mapping.get(c) > 0) {
  152. foundChars++;
  153. }
  154. Integer currentCount = mapping.get(c);
  155. currentCount--;
  156. mapping.put(c, currentCount);
  157. }
  158. while(foundChars == totalChars) {
  159. Character toBeRemoved = input.charAt(low);
  160. if(!mapping.containsKey(toBeRemoved)) { low++; continue; }
  161. Integer countBeforeRemoval = mapping.get(toBeRemoved);
  162. if(countBeforeRemoval == 0) {
  163. foundChars--;
  164. int currentLength = i - low + 1;
  165. if(currentLength < minLength) {
  166. minLength = currentLength;
  167. minStart = low;
  168. }
  169. }
  170. low++;
  171. countBeforeRemoval++;
  172. mapping.put(toBeRemoved, countBeforeRemoval);
  173. }
  174. }
  175. return input.substring(minStart, minStart + minLength);
  176. }
  177.  
  178. private static String nextLargest(char[] digits) {
  179. int length = digits.length;
  180. int high = length - 1;
  181. int low = length - 2;
  182. while(low >= 0 && digits[low] > digits[high]) {
  183. low--;
  184. }
  185. if(low < 0) {
  186. return "Not Possible";
  187. }
  188. StringBuilder sb = new StringBuilder();
  189. for(int i = 0; i<low; i++) {
  190. sb.append(digits[i]);
  191. }
  192. sb.append(digits[high]);
  193. sb.append(digits[low]);
  194. for(int i = high-1; i>low; i--) {
  195. sb.append(digits[i]);
  196. }
  197. return sb.toString();
  198. }
  199.  
  200. private static void testIsPalindrome() {
  201. String[] inputs = new String[]{"Test", "tacocat", "taco cat", "naan", "not actually"};
  202. for(String input: inputs) {
  203. System.out.println(input + " - " + isPalindrome(input));
  204. }
  205. }
  206.  
  207. private static void testLongestPalindromeSubstring() {
  208. String[] inputs = new String[]{"iwentskiiksnotreally", "aaaaaa", "tacocat", "randomstring", "racecar"};
  209. for(String input: inputs) {
  210. System.out.println(input + " - " + longestPalindromeSubstring(input));
  211. }
  212. }
  213.  
  214. private static void testMerge() {
  215. int[] arr1 = {1, 3};
  216. int[] arr2 = {2, 4, 6, 8};
  217. System.out.println(Arrays.toString(arr1) + " and " + Arrays.toString(arr2) + " yield: " +
  218. Arrays.toString(merge(arr1, arr2)));
  219. }
  220.  
  221. private static void testIsomorphic() {
  222. String[] input1 = new String[]{"aag", "adg", "avd", "vds", "aag"};
  223. String[] input2 = new String[]{"vvc", "aag", "tad", "vdv", "adg"};
  224. for(int i = 0; i<input1.length; i++) {
  225. System.out.println(input1[i] + " and " + input2[i] + ": " + isomorphic(input1[i], input2[i]));
  226. }
  227. }
  228.  
  229. private static void testTwoSum() {
  230. int[] arr = new int[]{1, 5, 7, -1};
  231. int sum = 13;
  232. System.out.println(Arrays.toString(arr) + " 2sum " + sum + ": " + twoSum(arr, sum));
  233. }
  234.  
  235. private static void testThreeSum() {
  236. int[] arr = new int[]{-1, 0, 1, 2, -1, -4};
  237. System.out.println(Arrays.toString(arr) + " 3sum " + ": " + threeSum(arr));
  238. }
  239.  
  240. private static void testShortestSubstring() {
  241. String[] inputs = new String[]{"ADOBECODEBANC", "geeksforgeeks", "tacocat", "randomstring", "racecar"};
  242. String[] chars = new String[]{"ABC", "ork", "tacocat", "randomstring", "racecar"};
  243. for(int i = 0; i<inputs.length; i++) {
  244. System.out.println(inputs[i] + " and " + chars[i] + " - " + shortestSubstring(inputs[i], chars[i]));
  245. }
  246. }
  247.  
  248. private static void testNextLargest() {
  249. String[] inputs = new String[]{"1234", "4321", "218765", "534976"};
  250. for(String input: inputs) {
  251. System.out.println(input + " - " + nextLargest(input.toCharArray()));
  252. }
  253. }
  254.  
  255. public static void main(String[] args) {
  256. // testIsPalindrome();
  257. // testLongestPalindromeSubstring();
  258. // testMerge();
  259. // testIsomorphic();
  260. // testTwoSum();
  261. // testThreeSum();
  262. // testShortestSubstring();
  263. // testNextLargest();
  264. }
  265. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement