Leetcode动归系列87---我要把你一刀一刀一刀一刀的切下去

“一尺之棰,日取其半,万世不竭。”---《庄子.天地》

点击打开链接

题目大意:给2个字符串,问s1能否通过Scramble(将其从中间任意一处切开,然后调换位置)操作变成s2。

解题思路:初看之下这道题似乎十分麻烦,先切成2半,再互换,再切。。。但细想之下其实不难发现,不论怎么操作,最后都会将字符串全部切开(然后再互换)。于是,思路就很简单了。

由于切到最后时永远是两个单字符进行判定,而最坏的情况也就是切到了最后,所以用迭代的思想一次进行判定返回true即可。此外还需判断s1,s2长度和内容是否一致(这都不一致那肯定是不可能isScramble的啦)

代码:

public boolean isScramble(String s1, String s2) {
        
        if(s1.equals(s2)) return  true;
        int[] letter = new int[26];
        for(int i=0;i<s1.length();i++){
            letter[s1.charAt(i)-'a']++;
            letter[s2.charAt(i)-'a']--;
        }
        for(int i=0;i<26;i++){
            if(letter[i]!=0) return false;
        }
        for(int i=1;i<s1.length();i++){
            if(isScramble(s1.substring(0,i),s2.substring(0,i)) && isScramble(s1.substring(i),s2.substring(i))){
                return true;
            }
            if(isScramble(s1.substring(0,i),s2.substring(s2.length()-i)) && isScramble(s2.substring(0,s2.length()-i),s1.substring(i))){
                return true;
            }
        }
            return false;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值