(C H) (J) (A D F G I) (B) (E)
Problem 2
Returns true if and only if the specified string, str, . . .
consists wholly of 0 or more a's followed by the same number of b's.
Problem 3
Part A. Many correct solutions.
3 5
4.0
File data does not exist in the directory we're running the program in.
Part D.
Error C 8.0
Part E. Many correct solutions.
x
Problem 4
updateAll(myList, new ZeroEven()); class ZeroEven implments UnaryOperator<Integer> { public Integer apply(Integer elmt) { if (elmt % 2 == 0) { return 0; } return elmt; } }
Problem 5
Part A.
public static ArrayList<Integer> getKeysWithValue(int val, Map<String, Integer> map) { ArrayList<String> result = new ArrayList<>(); for(Map.Entry<String, Integer> entry: map.entrySet()) { if (entry.getValue() == val) { result.add(entry.getKey()); } } return result; }
Part B.
O(n) [correct answer depends on the code written in Part A]
Problem 6
Several variations on how to solve this. We'll show two
here.
Solution 1. No-helper-function solution. This one is O(n2) time, since it makes repeated calls to substring to do the recursion and repeated calls to "+" to build up the result. Note: Calls to substring and "+" were explicitly allowed on the exam.
public static String removeXs(String str) { if (str.isEmpty()) { return str; } if (str.charAt(0) == 'x') { return removeXs(str.substring(1)); } return str.charAt(0) + removeXs(str.substring(1)); }Solution 2. Tail-recursive solution with a helper function and no call to substring. Still O(n2) because you are creating a new string on every call. You can do it in O(n) time if you use a StringBuilder (a mutable string type) instead for soFar parameter and return type, and then convert it back to a String in the top-level function.
public static String removeXs(String str) { return removeXsH(str, 0, ""); } // Let's call noX a version of str.substring(start) without x's: // returns soFar with noX appended to it public static String removeXsH(String str, int start, String soFar) { if (start == str.length()) { return soFar; } if (str.charAt(start) != 'x') { return removeXsH(str, start + 1, soFar + str.charAt(start)); } return removeXsH(str, start + 1, soFar); }