给定两个字符串 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;
    }



posted @ 2020-06-06 00:53  Prince丶prayK  阅读(780)  评论(0编辑  收藏  举报