LeetCode389-找不同

 

非商业,LeetCode链接附上:

https://leetcode-cn.com/problems/find-the-difference/

进入正题。

 

题目:

给定两个字符串 s 和 t,它们只包含小写字母。

字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。

请找出在 t 中被添加的字母。

示例:

示例 1:

输入:s = "abcd", t = "abcde"
输出:"e"
解释:'e' 是那个被添加的字母。
示例 2:

输入:s = "", t = "y"
输出:"y"
示例 3:

输入:s = "a", t = "aa"
输出:"a"
示例 4:

输入:s = "ae", t = "aea"
输出:"a"

代码实现:

public char findTheDifference(String s, String t) {

        char ans = t.charAt(t.length() - 1);
        for (int i = 0; i < s.length(); i++) {
            ans ^= s.charAt(i);
            ans ^= t.charAt(i);
        }
        return ans;
    }
    //时间复杂度O(n),空间复杂度O(1)

 

知识点:

异或操作就是在各种计算机语言中,如C、C++、java等,使用按位异或的思想执行的操作。

异或操作满足结合律和交换律,则由其性质可知,在计算机语言中,实现一些功能,例如参数的交换,奇偶性的判断等,使用异或操作就会变得非常简单。

除此之外,还可以使用计算机语言进行其他更多的应用。

 

在各种计算机语言中,如C、C++、java等,使用按位异或的思想执行的操作。
异或逻辑的关系是:当AB不同时,输出P=1;当AB相同时,输出P=0。
“⊕”是异或数学运算符号,异或逻辑也是与或非逻辑的组合,其逻辑表达式为:P=A⊕B。在计算机语言中,异或的符号为” ^ “。

 

1)交换律:a ^ b = b ^ a。
2)结合律:a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
d = a ^ b ^ c 可以推出 a = d ^ b ^ c。
3)自反性:a ^ b ^ a = b。
异或运算最常见于多项式除法,不过它最重要的性质还是自反性。
 
通过异或运算,在不引入第三个变量的情况下,交换两个数的值:
a=a^b
b=a^b
a=a^b
 
思考:
生活不止眼前的苟且,还有诗和远方的田野。
计算机不止有加减乘除,还有异或。
计算机首先是学科是科学,然后有其对应的落地应用。
日拱一卒,积跬步以成千里,积小流以成江海吧。
 
--End
 
 
posted @ 2020-11-19 10:49  黑冰台  阅读(166)  评论(0)    收藏  举报