1. 程式人生 > >[CareerCup] 1.3 Permutation String 字串的排列

[CareerCup] 1.3 Permutation String 字串的排列

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; } };