2840. 判断通过操作能否让字符串相等 II
思路:偶数位上的字符可以随意交换,奇数位上的字符也可以随意交换。那么就是比偶数位上的字符元素是不是能一一映射,奇数位也同理。
方法一,这里用的是字符串string来进行排序和比较
class Solution {
public:
bool checkStrings(string s1, string s2) {
string t1="",t2="",t3="",t4="";
for(int i=0;i<s1.size();i+=2){
t1.push_back(s1[i]);
if(i+1<s1.size()) t2.push_back(s1[i+1]);
}
for(int i=0;i<s2.size();i+=2){
t3.push_back(s2[i]);
if(i+1<s2.size()) t4.push_back(s2[i+1]);
}
sort(t1.begin(),t1.end());
sort(t2.begin(),t2.end());
sort(t3.begin(),t3.end());
sort(t4.begin(),t4.end());
if(t1!=t3||t2!=t4) return false;
return true;
}
};
方法二,这里用到哈希表来进行比较
class Solution {
public:
bool checkStrings(string s1, string s2) {
unordered_map<char,int> mp1,mp2;
for(int i=0;i<s1.size();i++){
if(i%2) mp1[s1[i]]++;
else mp2[s1[i]]++;
}
bool flag=1;
for(int i=0;i<s2.size();i++){
if(i%2){
mp1[s2[i]]--;
if(mp1[s2[i]]<0) flag=0;
}else{
mp2[s2[i]]--;
if(mp2[s2[i]]<0) flag=0;
}
}
return flag;
}
};