LeetCode ---- Find the Difference (Java/Lua 实现)

题目:

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))


发布了159 篇原创文章 · 获赞 350 · 访问量 55万+

猜你喜欢

转载自blog.csdn.net/wenniuwuren/article/details/52911000