From : www.LintCode.com
描述
给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换。
置换的意思是,通过改变顺序可以使得两个字符串相等。
样例
“abc” 为 “cba” 的置换。
“aabc” 不是 “abcc” 的置换。
解决方案一
本方案思想:
若两个字符串是置换,则两个字符串中的字符种类及每种字符出现的次数必须是相同的。
首先,将字符串参数转为字符数组。
先比较两个字符数组的长度是否相等,若不相等,肯定不符合要求。
若长度相等,则先将数组排序,然后遍历字符数组,依次比较两个数组对应的元素是否相等。
若对应元素全部相等,则符合要求,否则,不符合要求。
代码实现(JAVA)
public class Solution {
/*
* @param A: a string
* @param B: a string
* @return: a boolean
*/
public boolean Permutation(String A, String B) {
// write your code here
//将字符串A、B转换为字符数组
char [] a = A.toCharArray();
char [] b = B.toCharArray();
//如果长度不相等,肯定不是置换
if (a.length != b.length){
return false;
}
//如果长度相等,则对两个字符数组进行排序
Arrays.sort(a);
Arrays.sort(b);
//遍历比较两个字符数组的元素是否相等
for (int i = 0; i < a.length; i++){
if (a[i] != b[i]){
return false;
}
}
return true;
}
}
总结
在提交的过程中,发现了一个问题。LintCode网站在进行代码格式检测时,会认为变量名和方法名的首字母大写是不合法的(包括题目自己的模板中的变量名)。
此处无需理会,因为一旦修改了题目自身的方法名,系统将找不到该方法,导致程序无法运行。