面试题 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; } }

浙公网安备 33010602011771号