跳转至

面试题 01.02. 判定是否互为字符重排#

问题描述#

给定两个字符串 s1s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。

示例 1:

输入: s1 = "abc", s2 = "bca"
输出: true 

示例 2:

输入: s1 = "abc", s2 = "bad"
输出: false

说明:

  • 0 <= len(s1) <= 100
  • 0 <= len(s2) <= 100

解题思路#

即比较两个字符串中所有出现的字符的次数是否相等。

可以使用 collections 库中的 Counter 统计每个字符的字数。

1
2
3
4
5
6
from collections import Counter

class Solution:
    def CheckPermutation(self, s1: str, s2: str) -> bool:
        c1, c2 = Counter(s1), Counter(s2)
        return c1 == c2

也可以自己使用字典实现。


针对题目中的测例都是小写字母。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
class Solution:
    def CheckPermutation(self, s1: str, s2: str) -> bool:
        count = [0] * (ord('z') - ord('a') + 1)

        for c in s1:
            count[ord(c) - 97] += 1

        for c in s2:
            count[ord(c) - 97] -= 1

        if any(count):
            return False            
        return True

可以排序后比较两个字符串是否相等。

1
2
3
class Solution:
    def CheckPermutation(self, s1: str, s2: str) -> bool:
        return "".join(sorted(s1)) == "".join(sorted(s2))
返回顶部

在手机上阅读