您的位置:首页 > Web前端

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))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: