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

浙公网安备 33010602011771号