LeetCode ---- Find the Difference (Java/Lua 实现)
2016-10-24 13:43
411 查看
题目:
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.
解题思路:
因为 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))
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.
解题思路:
因为 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))
相关文章推荐
- leetcode389 Find the Difference java
- 【LeetCode】389 Find the Difference(java)
- Leetcode 389. Find the Difference JAVA语言
- LeetCode之Find the Difference(Java版)
- 【LeetCode】389 Find the Difference(java)
- LeetCode-389. Find the Difference (Java)
- 【LeetCode】389 Find the Difference(java)
- leetcode 287:Find the Duplicate Number 二分法查找 java版
- Find the Difference -- LeetCode
- Leetcode 389 Find the Difference
- LeetCode(389) Find the Difference
- leetcode 389. Find the Difference 牛人用异或 或者 求和 解决,很简单。
- 关于LeetCode中Find the Difference一题的理解
- Leetcode 389 Find the Difference
- leetcode 389 Find the Difference C++
- leetcode:bits:Find the Difference(389)
- [leetcode]389. Find the Difference -- JavaScript 代码
- LeetCode389. Find the Difference简单
- 【leetcode】389. Find the Difference【E】
- Leetcode 389. Find the Difference (Easy) (cpp)