标签:exp i++ ble key more hash pos generate class
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);
}
}
标签:exp i++ ble key more hash pos generate class
原文地址:http://www.cnblogs.com/apanda009/p/7143267.html