怎样用异或查找出多出的字母
来源:互联网 发布:金知云林秀晶 编辑:程序博客网 时间:2024/06/04 21:21
今天刷leetcode,遇到了一道题,很有意思,就是给了俩字符串,一个A,一个B,字符串B是这样子的,先把字符串A打乱,然后随机在A中加入一个任意字母,就变成了B。问加入的是啥字母?
举个例子:
A:“abc”
B:“cbea”
那么很明显,加入的字母是e。如何求出来呢?
这里介绍一种非常简单的方法,就是使用异或。
因为字母是char类型,char类型可以当做int来看待,所以,char类型也是可以进行异或操作的。
众所周知。异或有两个性质:
第一个性质是:0异或任何数会得到这个数
比如0^2:
0000
0010
——
0010
还是会得到2。
第二个性质是:一个数异或上它自己等于0
也很好理解吧?比如2^2
0010
0010
——
0000
那么第二个性质,我们可以得出:
a^a^b^b^c^c…=0
现在看这道题,我们现在想要找出B字符串中多出来的那个字母是啥。
我们可以将A中所有的字母全部异或,得到
a^b^c
我们将得到的结果再与B中所有的字母相异或,得到:
a^b^c^c^b^e^a
整理一下就是:
a^a^b^b^c^c^e
最后得到的当然就是e咯。
最后上程序,在程序里我们用r作为最终结果,让r = 0,然后让r去分别异或A中的所有字母和B中的所有字母,因为0异或任何数都得原数,所以给r赋初始值为0。
public class Solution { public char findTheDifference(String s, String t) { char r = 0; for(int i = 0;i<s.length();i++) r^=s.charAt(i); for(int i = 0;i<t.length();i++) r^=t.charAt(i); return r; }}
特此记录,谨防忘记!
阅读全文
1 0
- 怎样用异或查找出多出的字母
- 怎样用Ruby快速查找十进制数字的十六进制值
- 怎样用hibernate的hql查询查询成map或list
- 怎样用hibernate的hql查询查询成map或list
- 构造一个单词查找树,支持以下两个操作的数据结构: 添加和搜索,只包含字母a-z或.。
- C#将字母或数字加密成字母的方法
- 查找小写字母开头的数据
- 查找只含有数字和字母的
- 查找不在数组里的字母
- codeWars之-查找缺少的字母
- js数字或字母的正则表达式
- 判断输入的是不是数字或字母
- 在web下怎样用javascript向listbox中添加或删除所选定的项!
- 怎样用sql列出一个表的所有字段或某一字段
- 异或运算及其应用-查找奇数个数的数字
- 用异或实现查找只出现一次的数字
- 怎样用代码来最小化或恢复程序
- 查找小写字母个数
- 将搜索二叉树转化为双向链表
- 在ListActivity底部添加不动的按钮
- 工作日记2017.08.01
- spring中获取项目根路径
- 操作系统实验三实验报告
- 怎样用异或查找出多出的字母
- Oracle-02
- 多态&多态的对象模型
- spring配置数据源的四种方式
- 多线程详细讲解
- Oracle PL/SQL开发基础(第二十五弹:操纵游标数据)
- Java自制简单RandomUtils随机数工具类
- hdu1030(数学题)
- 6. vue.js-饿了吗全套-项目运行.