题目:
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.
s = "abcd"
t = "abcde"
Output:
e
Explanation:
'e' is the letter that was added.
解题思路:
因为 t 是 s 被打乱后的字符串,然后加了一个字符,那么其实统计其中字符的个数,最后变化的的字符个数的就是所要找的字符。
Java 代码实现:
// 存进Map,对不同 char 个数计数,最后对比 char 字符的数量差别就可以知道插入的 char 是什么
public static char findTheDifference(String s, String t) {
Map<Character, Integer> sMap = new HashMap<Character, Integer>();
Map<Character, Integer> tMap = new HashMap<Character, Integer>();
char[] sChars = s.toCharArray();
char[] tChars = t.toCharArray();
for (int i = 0; i < s.length(); i++) {
if (sMap.get(sChars[i]) == null) {
sMap.put(sChars[i], 1);
} else {
sMap.put(sChars[i], sMap.get(sChars[i])+1);
}
}
for (int j = 0; j < t.length(); j++) {
if (tMap.get(tChars[j]) == null) {
tMap.put(tChars[j], 1);
} else {
tMap.put(tChars[j], tMap.get(tChars[j])+1);
}
}
for (int k = 0; k < t.length(); k++) {
if (tMap.get(tChars[k]) != sMap.get(tChars[k])) {
return tChars[k];
}
}
return Character.MIN_VALUE;
}
还有一种思路,因为是找到那个多余出来的字符,然而其他的字符都是一样的,相同都可以配对,可以想到 xor 抑或,相同的都为 0,最后留下那个不同的。
char result = 0;
for (char c : s.toCharArray()) {
result ^= c;
}
for (char c : t.toCharArray()) {
result ^= c;
}
return result;
Lua 代码实现: 使用 Java 的第一种思路。但是 Lua 的 Map 需要自己用他的数据结构 table 来实现。这里没用第二种方法是因为,lua 的位操作实在是不够强大,我暂时发现 Lua 5.3 也就支持数字位与,不支持字符。
function findTheDifference(s, t)
local sTable = {}
local tTable = {}
for i = 1, #s do
sTable[string.sub(s, i, i)] = 0
end
for i = 1, #t do
tTable[string.sub(t, i, i)] = 0
end
for i = 1, #s do
sTable[string.sub(s, i, i)] = sTable[string.sub(s, i, i)] + 1
end
for i = 1, #t do
tTable[string.sub(t, i, i)] = tTable[string.sub(t, i, i)] + 1
end
for i = 1, #s do
if(sTable[string.sub(s, i, i)] ~= tTable[string.sub(s, i, i)]) then
return string.sub(s, i, i)
end
end
end
s = "ymbgaraibkfmvocpizdydugvalagaivdbfsfbepeyccqfepzvtpyxtbadkhmwmoswrcxnargtlswqemafandgkmydtimuzvjwxvlfwlhvkrgcsithaqlcvrihrwqkpjdhgfgreqoxzfvhjzojhghfwbvpfzectwwhexthbsndovxejsntmjihchaotbgcysfdaojkjldprwyrnischrgmtvjcorypvopfmegizfkvudubnejzfqffvgdoxohuinkyygbd zmshvyqyhsozwvlhevfepdvafgkqpkmcsikfyxczcovrmwqxxbnhfzcjjcpgzjjfateajnnvlbwhyppdleahgaypxidkpwmfqwqyofwdqgxhjaxvyrzupfwesmxbjszolgwqvfiozofncbohduqgiswuiyddmwlwubetyaummenkdfptjczxemryuotrrymrfdxtrebpbjtpnuhsbnovhectpjhfhahbqrfbyxggobsweefcwxpqsspyssrmdhuelkkvyjxswj wofngpwfxvknkjviiavorwyfzlnktmfwxkvwkrwdcxjfzikdyswsuxegmhtnxjraqrdchaauazfhtklxsksbhwgjphgbasfnlwqwukprgvihntsyymdrfovaszjywuqygpvjtvlsvvqbvzsmgweiayhlubnbsitvfxawhfmfiatxvqrcwjshvovxknnxnyyfexqycrlyksderlqarqhkxyaqwlwoqcribumrqjtelhwdvaiysgjlvksrfvjlcaiwrirtkkxbwg icyhvakxgdjwnwmubkiazdjkfmotglclqndqjxethoutvjchjbkoasnnfbgrnycucfpeovruguzumgmgddqwjgdvaujhyqsqtoexmnfuluaqbxoofvotvfoiexbnprrxptchmlctzgqtkivsilwgwgvpidpvasurraqfkcmxhdapjrlrnkbklwkrvoaziznlpor"
t = "qhxepbshlrhoecdaodgpousbzfcqjxulatciapuftffahhlmxbufgjuxstfjvljybfxnenlacmjqoymvamphpxnolwijwcecgwbcjhgdybfffwoygikvoecdggplfohemfypxfsvdrseyhmvkoovxhdvoavsqqbrsqrkqhbtmgwaurgisloqjixfwfvwtszcxwktkwesaxsmhsvlitegrlzkvfqoiiwxbzskzoewbkxtphapavbyvhzvgrrfriddnsrft fowhdanvhjvurhljmpxvpddxmzfgwwpkjrfgqptrmumoemhfpojnxzwlrxkcafvbhlwrapubhveattfifsmiounhqusvhywnxhwrgamgnesxmzliyzisqrwvkiyderyotxhwspqrrkeczjysfujvovsfcfouykcqyjoobfdgnlswfzjmyucaxuaslzwfnetekymrwbvponiaojdqnbmboldvvitamntwnyaeppjaohwkrisrlrgwcjqqgxeqerjrbapfzurcwx hcwzugcgnirkkrxdthtbmdqgvqxilllrsbwjhwqszrjtzyetwubdrlyakzxcveufvhqugyawvkivwonvmrgnchkzdysngqdibhkyboyftxcvvjoggecjsajbuqkjjxfvynrjsnvtfvgpgveycxidhhfauvjovmnbqgoxsafknluyimkczykwdgvqwlvvgdmufxdypwnajkncoynqticfetcdafvtqszuwfmrdggifokwmkgzuxnhncmnsstffqpqbplypapctc tfhqpihavligbrutxmmygiyaklqtakdidvnvrjfteazeqmbgklrgrorudayokxptswwkcircwuhcavhdparjfkjypkyxhbgwxbkvpvrtzjaetahmxevmkhdfyidhrdeejapfbafwmdqjqszwnwzgclitdhlnkaiyldwkwwzvhyorgbysyjbxsspnjdewjxbhpsvj"
print(findTheDifference(s, t))