给定两个由小写字母组成的字符串 s1
和 s2
,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
示例 1:
输入:s1
= "abc",s2
= "bca" 输出: true
示例 2:
输入:s1
= "abc",s2
= "bad" 输出: false
说明:
0 <= len(s1) <= 100
0 <= len(s2) <= 100
这道我最直接的想法就是分别对两个字符串进行排序,然后比较两个字符串是否相同就可以。当然你也可以先进行判断字符串长度是否一样,若不一样,那么两个字符肯定无法重排成一样的
leetcode代码
class Solution {
public:
bool CheckPermutation(string s1, string s2) {
sort(s1.begin(),s1.end());
sort(s2.begin(),s2.end());
if(s1==s2){
return true;
}else{
return false;
}
}
};
还可以使用哈希表来做,但是必须首先必须要判断字符串长度是否相等。因为当第一个字符串的长度大于第二个字符串的长度时,且第二个字符串与第一个字符串相同长度部分的字符串的种类和个数一致,那么遍历第二个字符时,就不会进行后面的遍历,则会返回true,其实应该返回false。具体示例,比如s1=“abca”,s2=“cba”,此时应该返回false,但是在哈希表中,发现abc和cba一样就会返回true。因此要注意先比较字符串长度。
leetcode代码
class Solution {
public:
bool CheckPermutation(string s1, string s2) {
// if(s1.length()!=s2.length()){
// return false;
// }
vector<int> hash(128,0);
for(auto x:s1){
hash[x]++;
}
for(auto x:s2){
hash[x]--;
if(hash[x]<0){
return false;
}
}
return true;
}
};