每日一题- day3

每日一题- day3

新手入坑LeetCode,每天打卡一道题
算法不一定很好,只是我自己的一个水平体现,做个自己刷题的记录,欢迎交流学习
(尽量AC LeetCode官方的每日一题)
欢迎交流学习!

题目:面试题 01.02. 判定是否互为字符重排

给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。

思路:

  1. 桶排法:
  2. 将所有字母元素排序,比较

提示:这个题意不是只有一个元素的位置不一致(不要问我怎么知道的,问就是在这里跌倒了)

代码:

  1. 桶排序
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;
    }
};
  1. 排序比较
class Solution {
public:
    bool CheckPermutation(string s1, string s2) {
        //排序,比较
        sort(s1.begin(),s1.end());
        sort(s2.begin(),s2.end());
        return s1 == s2;
    }
};

猜你喜欢

转载自blog.csdn.net/Nmj_World/article/details/127077714