0x01.问题
给定两个字符串 s1
和 s2
,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
《程序员面试金典》 01.02
0x02.多维思路分析
思路一:使用一个数组,记录字符的出现位数,若出现不相等的情况就返回false
。
bool CheckPermutation(string s1, string s2) {
if(s1.size()!=s2.size()) return false;
vector<int> map(26,0);
for(char a:s1){
map[a-'a']++;
}
for(char a:s2){
map[a-'a']--;
if(map[a-'a']<0) return false;
}
return true;
}
思路二:排序后直接比较
bool CheckPermutation(string s1, string s2) {
if(s1.size()!s2.size()) return false;
sort(s1.begin(),s1.end());
sort(s2.begin(),s2.end());
return s1==s2;
}
思路三:使用异或,如果两字符串相应字符个数相等,异或结果一定为0。
这种思路应该是最好的了。
bool CheckPermutation(string s1, string s2) {
int n=s1.size();
if(s2.size()!=n) return false;
int ans=0;
for(int i=0;i<n;i++){
ans=ans^s1[i]^s2[i];
}
return !ans;
}
ATFWUS --Writing By 2020–03–30