【无标题】

Python-LC(1540:K次操作转变字符串)


思路:刚刚看到题,觉得不难,思路还是很直观(但是基础不牢,导致错误频频,写的sh*t 代码),先统计两个字符串中每一个字符应该修改的次数,然后就是遍历看看是否可以拥有足够的操作次数来进行修改

def char_len(a:str,b:str):
            return b-a if a<=b else 26+b-a
        lens = len(s)
        if len(s) != len(t):
            return False
        count_list = []
        # 统计每一个字符应该变换的次数ord将单字符转为unicode码方便计数
        for i in range(lens):
            count_list.append(char_len(ord(s[i]),ord(t[i])))
        print(count_list)
        #第一次报错,没有考虑k多余26的时候的情况
        result = {i:0 for i in range(1,27)}
        epochs = k // 26
        more = k % 26
        for i in range(1,27):
            result[i] = epochs
        for i in range(1,more+1):
            result[i] += 1
        # 第二次报错 循环判断出错
        for index,item in enumerate(count_list):
            for i in range(1,27):
                if item != 0 and item == i:
                    if result[i] != 0:
                        count_list[index] = 0
                        result[i] -= 1
        
        for i in count_list:
            if i != 0:
                return False
        return True

优化思路:每一个差值可以直接访问修改次数字典

def char_len(a:str,b:str):
            return b-a if a<=b else 26+b-a
        lens = len(s)
        if len(s) != len(t):
            return False
        count_list = []
        for i in range(lens):
            count_list.append(char_len(ord(s[i]),ord(t[i])))
        print(count_list)
        result =  defaultdict(int)
        epochs = k // 26
        more = k % 26
        for i in range(1,27):
            result[i] = epochs
        for i in range(1,more+1):
            result[i] += 1
        for item in count_list:
            if item != 0:
                if result[item] > 0:
                    result[item] -= 1
                else:
                    return False
        return True

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值