Leetcode 389 Find the Difference

来源:互联网 发布:JAVA年龄正则表达式 编辑:程序博客网 时间:2024/05/18 16:37


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:eExplanation:'e' is the letter that was added.


解一

看到题目后想到的最直接的方法。用两个数组分别记录两个字符串中每个字母出现的次数,将两个数组进行比较后,就可以知道多出来的是哪个字母。


class Solution {public:    char findTheDifference(string s, string t) {        int count1[27] = {0};        for(int i = 0; i < s.length(); i++)            count1[s[i]-'a']++;        for(int i = 0; i < t.length(); i++){            if(count1[t[i]-'a'] == 0) return t[i];            else count1[t[i]-'a']--;        }        return NULL;    }};


解二

看到题目的有一个标签是bit manipulation,所以简单搜索了一下,了解到异或运算的几个特点。

    1.交换律 a^b == b^a

    2.结合律 (a^b)^c == a^(b^c)

    3.对任意x, 都有x^x=0, x^0=x

    4.自反律 a^b^b=a^0=a

所以利用这些特点,只要将两个字符串中的每个字符进行异或,就能得到多出来的那个字母。

class Solution {public:    char findTheDifference(string s, string t) {        int ans = 0;        for(int i = 0; i < s.length(); i++)            ans ^= (s[i]^t[i]);        return ans^t[t.length()-1];    }};



0 0
原创粉丝点击