给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串
示例 1:
输入: s1 = "abc", s2 = "bca"
输出: true
示例 2:
输入: s1 = "abc", s2 = "bad"
输出: false
//我的解决方案
class Solution {
public boolean CheckPermutation(String s1, String s2) {
if (s1.length() != s2.length()) {
return false;
} else {
char[] chars = s1.toCharArray();
char[] chars1 = s2.toCharArray();
Arrays.sort(chars);
Arrays.sort(chars1);
// return Arrays.equals(chars, chars1); 看到别人的实现方式和自己一样,学到了Arrays中可以这样判断两个数组是否一样,学到了
return String.valueOf(chars).equals(String.valueOf(chars1)) ? true : false;
}
}
}
//方案二
/**
把字符串s1放到map中进行统计,再用s2去验证
*/
public static boolean CheckPermutation(String s1, String s2) {
if(s1.length() != s2.length())
return false;
HashMap<Character, Integer> map = new HashMap<>();//k:字符 v:数量
//将s1的字符添加到map中
for(char ch : s1.toCharArray()){
if(map.containsKey(ch)){
int i = map.get(ch);
map.put(ch, ++i);
}else{
map.put(ch, 1);
}
}
//判断s2中字符出现的次数是否和s1相同
for(char ch : s2.toCharArray()){
if(map.containsKey(ch)){
int i = map.get(ch);
map.put(ch, --i);
if(i < 0){//s2中的某个字符比第一个字符出现的次数多,直接就可以断定不相等了
return false;
}
}else{
return false;
}
}
return true;
}