389. 找不同

389. 找不同

总结:
	--这个题目大的方向有三种解法,其中hash是查找最为常用的方法
		通过牺牲空间,获取时间,hash的查找有很好的性质,在数据量
		没有过大时,可以看作o(1)操作
	--fun3()中的list查找可以在下次查找字符时,使用
	--求和,也是针对于ascii的性质来的
	--位运算 异或运算,在查找中也经常使用,适用于
		元素出现了偶数次的,其他出现了奇数次,那么就
		可以找到他
		
	  https://www.runoob.com/w3cnote/bit-operation.html
	  关于位运算的操作
	  
总体来说,代码的实现复杂度不高.注重思想就好

这种方法,提交并没有通过,原因在于,可能会添加重复元素,所以不能简单的判断,是否 存在

def fun1(s,t):
    #看到了查找两个字,首先的想法hash表
    dic={}
    for i in s:
        dic[i]=0
    for j in t:
        if j not in dic:
            return j
    #提交错误,原因在于没有想到可能添加重复元素 如s=a t=aa

上面方法的改进,除了判断是否存在,还进行了删除操作,判断当前是否是多出的

def fun2(s,t):#计数解法(对每个字符出现次数进行记录)
    # 对于fun1的解决方式
    #对于出现次数进行记录,然后在合适的时候减去
    dic = {}
    for i in s:
        dic[i] = dic.get(i, 0) + 1
    for j in t:
        if j not in dic or dic[j] == 0:
            return j
        else:
            dic[j] = dic.get(j, 0) - 1

    #其实我的重点是什么,是记录每个数字出现的次数,这样不一定是需要hash

与hash表记录,本质上没什么区别,绝大多数时候使用的都是hash,但偶尔也可使用list,在其具有很好的性质的时候

def fun3(s,t):
    '''
        chr(32)  ascii转字符
        ord('a') 字符转对应的ascii
    :param s:
    :param t:
    :return:
    '''

    ls=[0]*26  #开辟空间,存放数字
    print(ls)
    jishu=ord('a')
    print(ord('z'))
    for i in s:
        ls[ord(i)-jishu]+=1
    for i in t:
        ls[ord(i)-jishu]-=1
        if ls[ord(i)-jishu]<0:
            return i

进行求和操作,每一个字符都会有对应的ascii(unicode)码,是一个数字
那么可以分别对s和t求和,用t的和-s的和这样得到的结果就是多出的元素

def fun4(s,t):
    #字符串求和
    #多出来的那一部分就是多出来的
    sum_1=0
    sum_2=0
    for i in s:
        sum_1+=ord(i)
    for j in t:
        sum_2+=ord(j)
    return chr(sum_2-sum_1)

位运算,这个是很常用的异或(相同为0,不同为1)

def fun5(s,t):
    #位运算
    #异或运算  对应位相同为0,不同为1  0与任何数做异或该数不变
    #          (那么两个相同元素异或,对应位都相同 结果为0)

    #可以知道,除了插入字符,其他均出现偶数次(s,t合起来)
    eor=0
    for i in s:
        eor^=ord(i)
    for i in t:
        eor^=ord(i)
    return chr(eor)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值