0%

『LeetCode』面试题 01.02 判定是否互为字符重排

题目

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

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

示例 1:

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

示例 2:

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

说明:

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

标签

哈希表, 字符串, 排序


题解

【判定是否互为字符重排】简单模拟

模拟

统计所有字符串中所有字符的个数然后比较即可

1
2
3
4
# Code language: Python
class Solution:
def CheckPermutation(self, s1: str, s2: str) -> bool:
return len(s1) == len(s2) and Counter(s1) == Counter(s2)
1
2
3
4
5
6
7
8
9
10
11
// Code language: Java
class Solution {
public boolean CheckPermutation(String s1, String s2) {
int[] cnt = new int[256];
if (s1.length() != s2.length()) return false;
for (int i = 0, n = s1.length(); i < n; ++i) cnt[s1.charAt(i)]++;
for (int i = 0, n = s2.length(); i < n; ++i) if (--cnt[s2.charAt(i)] < 0) return false;
for (int i = 0; i < 256; ++i) if (cnt[i] != 0) return false;
return true;
}
}
1
2
3
4
5
6
7
8
9
10
11
// Code language: C++
class Solution {
public:
bool CheckPermutation(string s1, string s2) {
int cnt[256]{0};
for (char c: s1) cnt[c]++;
for (char c: s2) if (--cnt[c] < 0) return false;
for (int i = 0; i < 256; ++i) if (cnt[i] != 0) return false;
return true;
}
};
  • 时间复杂度: \(O(n)\)
  • 空间复杂度: \(O(n)\), 字符串种类是有限的,也可以认为是 \(O(1)\)

如果对你有帮助的话,请给我点个赞吧~

欢迎前往 我的博客Algorithm - Github 查看更多题解

--- ♥ end ♥ ---

欢迎关注我呀~