面试题 01.02: 判定是否互为字符重排(C++)
2021-01-20 23:13
标签:tco color 长度 ++ nbsp begin c++ 输出 class 题目地址:https://leetcode-cn.com/problems/check-permutation-lcci/ 给定两个字符串 示例 1: 输入: s1 = "abc", s2 = "bca" 输入: s1 = "abc", s2 = "bad" 思路1:判断两个字符串能否构成同一个字符串,首要条件便是两者长度相同,只有中这个大条件下才能谈及其它,所以,首先判断两者长度是否相同,其次,我们对两字符串进行排序,这样的好处是我们可以直接使用一层循环判断两字符串对应元素是否相同,当发现有不同元素时,直接返回false即可。 思路2:哈希表。同样的思路,不过与思路1的区别是我们要对字符串s2中的每个元素出现的次数进行比较。 思路3:使用双哈希表存储每个字符串中的字符出现的次数,然后判断两个哈希表中元素是否相同即可。 思路1 思路2 思路3 面试题 01.02: 判定是否互为字符重排(C++) 标签:tco color 长度 ++ nbsp begin c++ 输出 class 原文地址:https://www.cnblogs.com/wzw0625/p/12899743.html题目描述
s1
和 s2
,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。题目示例
输出: true
示例 2:
输出: false解题思路
程序源码
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 )
{
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;
sort(s1.begin(), s1.end());
sort(s2.begin(), s2.end());
unordered_mapchar, int> mp;
for(int i = 0; i )
{
mp[s1[i]]++;
}
for(int j = 0; j )
{
mp[s2[j]]--;
if(mp[s2[j]] 0) return false;
}
return true;
}
};
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());
unordered_mapchar, int> mp_s1;
unordered_mapchar, int> mp_s2;
for(int i = 0; i )
{
mp_s1[s1[i]]++;
mp_s2[s2[i]]++;
}
for(int j = 0; j )
{
if(mp_s1[s1[j]] != mp_s2[s1[j]]) return false;
}
return true;
}
};
文章标题:面试题 01.02: 判定是否互为字符重排(C++)
文章链接:http://soscw.com/index.php/essay/44747.html