题目
给定两个字符串 s1
和 s2
,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
示例 1:
输入: s1 = "abc", s2 = "bca"
输出: true
示例 2:
输入: s1 = "abc", s2 = "bad"
输出: false
说明:
0 <= len(s1) <= 100
0 <= len(s2) <= 100
题解1
思路
- 使用哈希表保存每个字符出现的次数,若两个字符串对应的哈希表相等,则说明两个字符串互为重拍
代码
from collections import Counter
class Solution:
def CheckPermutation(self, s1: str, s2: str) -> bool:
return Counter(s1) == Counter(s2)
复杂度
- 时间复杂度: O ( m + n ) O(m+n) O(m+n)
- 空间复杂度: O ( ∣ Σ 1 ∪ Σ 2 ∣ ) O(|\Sigma_1 \cup \Sigma_2|) O(∣Σ1∪Σ2∣)
题解2
思路
- 若两个字符串长度不相等,则不是互为重拍
- 若两个字符串相等,则排序然后比较每一位是否相等,若存在不相等则说明非互为重拍
代码
class Solution:
def CheckPermutation(self, s1: str, s2: str) -> bool:
if len(s1) != len(s2): return False
sb1,sb2 = list(s1), list(s2)
sb1.sort()
sb2.sort()
return sb1 == sb2
复杂度
- 时间复杂度: O ( m log m + n log n ) O(m\log m+n \log n) O(mlogm+nlogn)
- 空间复杂度: O ( ∣ Σ 1 ∪ Σ 2 ∣ + log m + log n ) O(|\Sigma_1 \cup \Sigma_2| + \log m + \log n) O(∣Σ1∪Σ2∣+logm+logn)