Leetcode 1153 字符串转化

class Solution:
    def canConvert(self, str1: str, str2: str) -> bool:
        if str1 == str2:
            return True

        s = set(str2)
        if len(s) == 26:
            '''
            字符串2把所有字符种类26种都占满了,字符串1只有可能一开始也是占满26种字符才有转成功的可能性
            但是字符串1只要变换了第一次,总字符种类数一定变成25了,后面不管怎么变,字符种类数都是非递增
            的,不可能转换成功
            '''
            return False


        '''
        字符串1里面相同数值的位置不管怎么变化最后一开始数值相等的位置最后数值肯定还是相等的,所以str1里面
        数值相同的位置,str2里面对应位置数值也必须相同,否则不可能转换,能保证这个条件最后就一定可以转成功
        '''
        m = {}
        for i, ch in enumerate(str1):
            if ch not in m:
                m[ch] = []
            m[ch].append(i)

        for pos_list in m.values():
            for i in range(len(pos_list)):
                for j in range(i+1, len(pos_list)):
                    if str2[pos_list[i]] != str2[pos_list[j]]:
                        return False
        return True


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值