Given two strings s and t which consist of only lowercase letters. String t is generated by random shuffling string s and then add one more letter at a random position. Find the letter that was added in t. Example: Input: s = "abcd" t = "abcde" Output: e Explanation: 'e' is the letter that was added.
我的做法, hashMap, O(n) space, O(n) time:
public class Solution { public char findTheDifference(String s, String t) { if (t.length() == 1) { return t.charAt(0); } Map<Character, Integer> set = new HashMap<>(); Map<Character, Integer> map = new HashMap<>(); for (int i = 0; i < s.length(); i++) { set.put(s.charAt(i), set.getOrDefault(s.charAt(i), 0) + 1); map.put(t.charAt(i), map.getOrDefault(t.charAt(i), 0) + 1); } map.put(t.charAt(t.length() - 1), map.getOrDefault(t.charAt(t.length() - 1), 0) + 1); for (int i = 0; i < t.length(); i++) { if (!set.containsKey(t.charAt(i)) || set.get(t.charAt(i)) < map.get(t.charAt(i))) { return t.charAt(i); } } return '1'; } }
用ascii 码表, 时间, 空间都是O(1) 学会转化: (int) s.charAt(i)
public class Solution { public char findTheDifference(String s, String t) { // Initialize variables to store sum of ASCII codes for // each string int charCodeS = 0, charCodeT = 0; // Iterate through both strings and char codes for (int i = 0; i < s.length(); ++i) charCodeS += (int)s.charAt(i); for (int i = 0; i < t.length(); ++i) charCodeT += (int)t.charAt(i); // Return the difference between 2 strings as char return (char)(charCodeT - charCodeS); } }