Leetcode程序员面试金典面试题:01.02.判断是否互为字符重排


一、 题目: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:这个算法复杂度较高,不如上面的那个。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李小枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值