[CareerCup] 1.3 Permutation String 字串的排列

Grandyang發表於2015-07-16

 

1.3 Given two strings, write a method to decide if one is a permutation of the other.

 

這道題給定我們兩個字串,讓我們判斷一個是否為另一個的全排列字串。在LeetCode中,關於排列的題有如下幾道,Permutation Sequence 序列排序Permutations 全排列Permutations II 全排列之二Next Permutation 下一個排列。這道題跟它們比起來,算是很簡單的了。我們先來看一種O(n)的解決方法,跟之前那道1.1 Unique Characters of a String 字串中不同的字元 使用的方法相同,還是用整型陣列來代替雜湊表,首先遍歷一遍s1中的字元,將其對應位置增1,然後再遍歷s2,將其對應位置減1,如果此時減成了負數,說明s2和s1的字元及其數量不完全相等,返回false。若s2遍歷完成,返回true。程式碼如下:

 

class Solution {
public:
    bool isPermutation(string s1, string s2) {
        if (s1.size() != s2.size()) return false;
        int m[256] = {0};
        for (int i = 0; i < s1.size(); ++i) ++m[s1[i]];
        for (int i = 0; i < s2.size(); ++i) {
            --m[s2[i]];
            if (m[s2[i]] < 0) return false; 
        }
        return true;
    }
};

 

當然如果不考慮執行效率的話,也可以分別對兩個字串進行排序,排序後的兩個字串如果完全相等則返回true,反之返回false。程式碼如下:

 

class Solution {
public:
    bool isPermutation(string s1, string s2) {
        if (s1.size() != s2.size()) return false;
        sort(s1.begin(), s1.end());
        sort(s2.begin(), s2.end());
        return s1 == s2;
    }
};

 

相關文章