程序员面试金典---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
一次编辑
思路:
假设
first
和second
的长度分别是m
和n
。如果
first
和second
只需要一次编辑,只有三种情况:
- 往
first
插入一个字符,此时n-m=1
,second
比first
多一个字符,其余字符都相同- 从
first
中删除一个字符得到second
,此时m-n=1
,first
比second
多一个字符,其余字符都相同。- 将
first
中的一个字符替换成不同的字符得到second
,此时m=n
,first
和second
恰好有一个字符不同。
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
分类:
力扣-程序员面试金典题目整理
标签:
力扣学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构