面试题 01.02. 判定是否互为字符重排
给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
示例 1:
输入: s1 = "abc", s2 = "bca"
输出: true
示例 2:
输入: s1 = "abc", s2 = "bad"
输出: false
说明:
0 <= len(s1) <= 100
0 <= len(s2) <= 100
思路
①由于字符串长度<=100,此题应当排序
class Solution {
public:
bool CheckPermutation(string s1, string s2) {
int len1=s1.length(), len2=s2.length();
if(len1!=len2) return false;
sort(s1.begin(), s1.end());
sort(s2.begin(), s2.end());
for(int i=0; i<len1; i++){
if(s1[i]!=s2[i]) return false;
}
return true;
}
};
②如果字符串很长,那么排序的时间复杂度是O(nlog(n)),效率会降低。所以需要用哈希表,s1++,s2--,最终哈希表值全为0return true;
class Solution {
public:
int has[256];
bool CheckPermutation(string s1, string s2) {
int len1=s1.length(), len2=s2.length();
if(len1!=len2) return false;
fill(has, has+256, 0);
for(int i=0;i<len1;i++){
has[s1[i]]++;
has[s2[i]]--;
}
for(int i=0;i<256;i++){
if(has[i]!=0) return false;
}
return true;
}
};