【Lintcode】1376. Equivalent Strings

题目地址:

https://www.lintcode.com/problem/equivalent-strings/description

给定两个字符串 s s s t t t,问它们是否等价。两个字符串等价当且仅当:
1、 s = t s=t s=t
2、 s s s的前半部分与 t t t的前半部分等价并且 s s s的后半部分与 t t t的后半部分等价;
3、 s s s的前半部分与 t t t的后半部分等价并且 s s s的后半部分与 t t t的前半部分等价;
这里的前(后)半部分指的是平均分的情况下的前(后)半部分。题目保证两个字符串长度相等。注意,如果两个字符串长度都是奇数(也就是无法均分),那它们等价规定为完全相等。

直接按照定义来做即可,也即利用递归来做。代码如下:

public class Solution {
    /**
     * @param s1: a string
     * @param s2: a string
     * @return: is s1 and s2 are equivalent
     */
    public boolean isEquivalentStrings(String s1, String s2) {
        // Write your code here
        int len = s1.length();
        if (len % 2 != 0) {
            return s1.equals(s2);
        }
        
        if (s1.equals(s2)) {
            return true;
        }
    
        String s1sub1 = s1.substring(0, len / 2), s1sub2 = s1.substring(len / 2, len);
        String s2sub1 = s2.substring(0, len / 2), s2sub2 = s2.substring(len / 2, len);
        return isEquivalentStrings(s1sub1, s2sub1) && isEquivalentStrings(s1sub2, s2sub2) || isEquivalentStrings(s1sub1, s2sub2) && isEquivalentStrings(s1sub2, s2sub1);
    }
}

时间复杂度 O ( n log ⁡ n ) O(n\log n) O(nlogn)(可以由 T ( n ) = n + 2 T ( n 2 ) T(n)=n+2T(\frac{n}{2}) T(n)=n+2T(2n)递推得到。equals需要 O ( n ) O(n) O(n)的时间),空间 O ( log ⁡ n ) O(\log n) O(logn)(递归深度)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值