天天看點

算法小練習:面試題 01.02. 判定是否互為字元重排

面試題 01.02. 判定是否互為字元重排

給定兩個字元串 s1 和 s2,請編寫一個程式,确定其中一個字元串的字元重新排列後,能否變成另一個字元串。

示例 1:

輸入: s1 = “abc”, s2 = “bca”

輸出: true

示例 2:

輸入: s1 = “abc”, s2 = “bad”

輸出: false

說明:

0 <= len(s1) <= 100

0 <= len(s2) <= 100

思路:

先判斷兩個字元串長度是否一緻,然後用vector或者map,統計每個字元出現的次數,然後傳回二者是否相等

class Solution {
public:
    bool CheckPermutation(string s1, string s2) {
        if(s1.length()!=s2.length()){
            return false;
        }
         map<char,int> mpA,mpB;//利用map分别統計每個字元出現的次數,在判斷兩個元素是否相等
        for(int i=0;i<s1.length();i++){
            mpA[s1[i]]+=1;
            mpB[s2[i]]+=1;
        }
        return mpA==mpB;
    }
};
           

當然也可以直接利用排序

class Solution {
public:
    bool CheckPermutation(string s1, string s2) {
       	sort(s1.begin(),s1.end());
        sort(s2.begin(),s2.end());
        return s1 == s2;
    }
};