题意
看一个字符串是否为另一个字符串的重新排列
思路
- 显然的一种情况是两个字符串的长度不一样的时候,肯定不是重排。
- 1️⃣排序法。如果是重排,那么两个字符串排序后应该是一样的字符串。时间复杂度是(O(nlogn))
- 2️⃣用空间换时间,题目没说是Ascii还是Unicode,默认按Ascii处理。如果说是字符串的重排,那么肯定用到的字母和对应的个数应该是一致的,读入s1字符串的时候进行统计,读入s2的时候删去,最后应该是全为0才对,时间复杂度是(O(n))
代码(排序法)
class Solution {
public:
bool CheckPermutation(string s1, string s2) {
if(s1.size() != s2.size()) {
return false;
}
sort(s1.begin(), s1.end());
sort(s2.begin(), s2.end());
for(int i = 0; i < s1.size(); i++) {
if(s1[i] != s2[i]) {
return false;
}
}
return true;
}
};
代码(空间换时间)
class Solution {
public:
bool CheckPermutation(string s1, string s2) {
if(s1.size() != s2.size()) {
return false;
}
vector<int> hash_table(256, 0);
for(auto ch: s1) {
hash_table[ch - '0']++;
}
for(auto ch: s2) {
hash_table[ch - '0']--;
}
for(auto i: hash_table) {
if(i != 0) {
return false;
}
}
return true;
}
};