面试题 01.02. 判定是否互为字符重排

给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。

示例 1:

输入: s1 = "abc", s2 = "bca"
输出: true
示例 2:

输入: s1 = "abc", s2 = "bad"
输出: false
说明:

0 <= len(s1) <= 100
0 <= len(s2) <= 100

 

可以使用将一个数组转为list,然后从第二个数组开始找,每找一个字符,就在list中对应删除一个,若list中没有,则说明两个字符串元素不一致,不能重新排列

这里也可以额外创建一个数组,数组下标为对应ASCII码序号,数组大小为字符串中可以使用的字符数量(如a~z为26),然后遍历一次,s1每遇到一个字符则对应下标++,s2每遇到一个字符则对应下标--,遍历完成后再便利一次数组,若数组中存在不为0的元素则s2不能重排列为s1

class Solution {
    public boolean CheckPermutation(String s1, String s2) {
        if (s1==null|| s1=="" || s2 == null|| s2 == ""|| s1.length()!=s2.length()){
            return false;
        }
        List<String> s1List =new ArrayList<>(Arrays.asList(s1.split("")));
        List<String> s2List = Arrays.asList(s2.split(""));
        for (String s : s2List) {
            int i = s1List.indexOf(s);
            if (i<0){
                return false;
            }
            s1List.remove(i);

        }
        return true;
    }
}

 

posted @ 2020-12-22 20:46  和洒江郊  阅读(99)  评论(0)    收藏  举报