描述: 给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换。
置换的意思是,通过改变顺序可以使得两个字符串相等。
样例: “abc” 为 “cba” 的置换。
“aabc” 不是 “abcc” 的置换。
思路: 优先检查两个字符串的长度,长度不一样直接返回0; 把两个字符串用冒泡排序按照从小到大把每个字符排序,如果两个字符串满足置换的条件,排序后的字符串是一样的; 对比两个排序后的字符串,相等返回1,不相等返回0。
C++实现
class Solution { public: /* * @param A: a string * @param B: a string * @return: a boolean */ bool Permutation(string A, string B) { // write your code here int ALen = A.size(); int BLen = B.size(); if (ALen != BLen) { return 0; } else { int i, j; int flag = 1; for (i = 0; i < ALen; i++) { for (j = ALen - 1; j > i; j--) { if (A.at(j) < A.at(j-1)) { char temp = A.at(j); A.at(j) = A.at(j-1); A.at(j-1) = temp; flag = 1; } } } for (i = 0; i < ALen; i++) { for (j = ALen - 1; j > i; j--) { if (B.at(j) < B.at(j-1)) { char temp = B.at(j); B.at(j) = B.at(j-1); B.at(j-1) = temp; flag = 1; } } } if (A != B) { return 0; } } return 1; } };