📅  最后修改于: 2023-12-03 14:55:48.335000             🧑  作者: Mango
这个问题可以转化为判断两个字符串中的字符出现次数是否完全一致。如果完全一致,则说明可以通过添加或删除字符来获得另一个字符串的排列。
以下为 Python 实现代码示例(时间复杂度为 O(n)):
def can_permute(s1: str, s2: str) -> bool:
if len(s1) != len(s2):
# 字符串长度不相等,一定不可能获得排列
return False
count = [0] * 128 # 由于 ASCII 码只有 128 个字符,因此可以使用长度为 128 的数组来记录字符出现次数
for c in s1:
count[ord(c)] += 1 # 统计 s1 中每个字符出现的次数
for c in s2:
count[ord(c)] -= 1 # 每遍历一个 s2 中的字符,就将对应的 count 减 1
if count[ord(c)] < 0:
# 如果当前字符在 s1 中出现的次数比在 s2 中出现的次数还少,那么一定不可能获得排列
return False
return True
在以上代码中,我们使用了一个长度为 128 的数组来记录每个字符出现的次数,并且遍历了两个字符串中的所有字符。因此时间复杂度为 O(n)。
使用方法:调用 can_permute()
函数,传入两个字符串参数。
s1 = "abcdefg"
s2 = "begfadc"
result = can_permute(s1, s2)
print(result) # True
以上代码输出结果为 True
,说明字符串 s2
是字符串 s1
的一个排列。