给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
示例1:
输入: s1 = “abc”, s2 = “bca”
输出: true
示例2:
输入: s1 = “abc”, s2 = “bad”
输出: false
解法:
用一个数组nums记录s1中每个字符的数量,然后在减去s2中每个字符的数量,如果遇到不够减的情况,直接返回false
class Solution {
public boolean CheckPermutation(String s1, String s2) {
if(s1.length()!=s2.length()){
return false;
}
int[] nums = new int[128];
for(int i=0;i<s1.length();i++){
nums[s1.charAt(i)-'A']++; //ASCII码
}
for(int j=0;j<s2.length();j++){
if(--nums[s2.charAt(j)-'A']<0){
return false;
}
}
return true;
}
}
解法2:
把两个字符串分别转化为两个字符数组,接着在对两个字符数组进行排序,最后在比较这两个排序后的数组
public boolean CheckPermutation(String s1, String s2) {
char[] c1 = s1.toCharArray(); //toCharArray() 方法将字符串转换为字符数组
Arrays.sort(c1); //对数组排序
char[] c2 = s2.toCharArray();
Arrays.sort(c2);
return new String(c1).equals(new String(c2));
}