描述:
给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换。
置换的意思是,通过改变顺序可以使得两个字符串相等。
样例:
“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;
}
};