每日一题- day3
新手入坑LeetCode,每天打卡一道题
算法不一定很好,只是我自己的一个水平体现,做个自己刷题的记录,欢迎交流学习
(尽量AC LeetCode官方的每日一题)
欢迎交流学习!
题目:面试题 01.02. 判定是否互为字符重排
给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
思路:
- 桶排法:
- 将所有字母元素排序,比较
提示:这个题意不是只有一个元素的位置不一致(不要问我怎么知道的,问就是在这里跌倒了)
代码:
- 桶排序
class Solution {
public:
bool CheckPermutation(string s1, string s2) {
//桶排法
if(s1.size() != s2.size()) return false;
int cnt[256]{0};//默认值为0
for(int i = 0; i < s1.size(); i ++) ++cnt[s1[i]],cout<<i<<endl;
for(int i = 0; i < s2.size(); i ++) if(-- cnt[s2[i]] < 0) return false;
for(int i = 0; i < 256; i ++) if(cnt[i] != 0) return false;
return true;
}
};
- 排序比较
class Solution {
public:
bool CheckPermutation(string s1, string s2) {
//排序,比较
sort(s1.begin(),s1.end());
sort(s2.begin(),s2.end());
return s1 == s2;
}
};