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