一、 题目:01.02.判断是否互为字符重排
题目描述:
给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
示例 1:
输入: s1 = “abc”, s2 = “bca”
输出: true
示例 2:
输入: s1 = “abc”, s2 = “bad”
输出: false
说明:
0 <= len(s1) <= 100
0 <= len(s2) <= 100
来源:力扣(LeetCode)
原题链接:
原题链接:https://leetcode-cn.com/problems/check-permutation-lcci
二、解题思路:
1.思路:
算法1:首先判断字符串s1和s2长度是否相等,如果不相等,则不可能是字符重排;
创建一个 StringBuilder对象,把s2转换成sm,为后续的deleteCharAt方法做准备;
然后判断s1中的字符是否被s2全部包含,如果全部包含,则s1和s2互为字符重排(因为s1和s2长度相等)。
2.代码:
算法1:
public class T01 {
public boolean CheckPermutation(String s1, String s2) {
if(s1.length() != s2.length()) return false;//判断字符串长度是否相等
StringBuilder sm = new StringBuilder(s2);//StringBuilder类创建的字符串可以进行delete操作
for(int i = 0;i<s1.length();i++) {//依次判断s1中的字符,是否在s2中都存在
String s = String.valueOf(s1.charAt(i));//依次获取s1中的字符
int index = sm.indexOf(s);//获取字符在s2中的索引位置
if(index == -1) return false;//如果索引为-1,说明两个字符串的字符不相同
sm.deleteCharAt(index);//删除s2中已经比对过的字符
}
return true;
}
Leetcode原图:
补充:
其实我首先想到的是:先把字符串中的字符进行排序(比如都按升序排序),然后再判断两个字符串是否相等即可。
比如s1=“bcda”,s2=“abdc”
对字符串中的字符按升序排序后:
s1=“abcd”,s2=“abcd”,此时两字符串相等,即互为字符重排。
当然别忘了先判断s1和s2长度是否相等。
ps:这个算法复杂度较高,不如上面的那个。