程序员面试金典---2

回文排列

思路:回文排列的特征之一就是如果字符串中每个字符的个数都是两个,或者只有只有一个字符个数为奇数个。只有上述两种结果。

class Solution:
    def canPermutePalindrome(self, s: str) -> bool:
        // 将字符串转成个数字典
        s_dic = Counter(s)
        // 标识几个字符出现为奇数个的字符,0表示没有,1出现一次
        flag = 0
        // 循环
        for i in s_dic:
            // 如果出现了奇数个的字符
            if s_dic[i] % 2 != 0:
                // 置一
                flag += 1
        // 如果大于一个
        if flag > 1:
            return False
        return True

一次编辑

思路:

假设firstsecond的长度分别是mn

如果firstsecond只需要一次编辑,只有三种情况:

  1. first插入一个字符,此时n-m=1secondfirst多一个字符,其余字符都相同
  2. first中删除一个字符得到second,此时m-n=1firstsecond多一个字符,其余字符都相同。
  3. first中的一个字符替换成不同的字符得到second,此时m=nfirstsecond恰好有一个字符不同。
class Solution:
    def oneEditAway(self, first: str, second: str) -> bool:
        m, n = len(first),len(second)
        if m < n:
            return self.oneEditAway(second, first)
        
        if m - n > 1:
            return False

        for i, (x, y) in enumerate(zip(first, second)):
            if x != y:
                return first[i + 1:] == second[i + 1:] if m == n else first[i + 1:] == second[i:]
        return True
posted @   楸枰~  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示