美文网首页
2023-03-18 LeetCode:1616. 分割两个字符

2023-03-18 LeetCode:1616. 分割两个字符

作者: alex很累 | 来源:发表于2023-03-17 14:55 被阅读0次

1616. 分割两个字符串得到回文串

问题描述

给你两个字符串 ab ,它们长度相同。请你选择一个下标,将两个字符串都在 相同的下标 分割开。由 a 可以得到两个字符串: aprefixasuffix ,满足 a = aprefix + asuffix ,同理,由 b 可以得到两个字符串 bprefixbsuffix ,满足 b = bprefix + bsuffix 。请你判断 aprefix + bsuffix 或者 bprefix + asuffix 能否构成回文串。
当你将一个字符串 s 分割成 sprefixssuffix 时, ssuffix 或者 sprefix 可以为空。比方说, s = "abc" 那么 "" + "abc""a" + "bc""ab" + "c""abc" + ""都是合法分割。
如果 能构成回文字符串 ,那么请返回 true,否则返回 false
注意, x + y 表示连接字符串 xy

示例

输入:a = "x", b = "y"
输出:true
解释:如果 a 或者 b 是回文串,那么答案一定为 true ,因为你可以如下分割:
aprefix = "", asuffix = "x"
bprefix = "", bsuffix = "y"
那么 aprefix + bsuffix = "" + "y" = "y" 是回文串。

输入:a = "ulacfd", b = "jizalu"
输出:true
解释:在下标为 3 处分割:
aprefix = "ula", asuffix = "cfd"
bprefix = "jiz", bsuffix = "alu"
那么 aprefix + bsuffix = "ula" + "alu" = "ulaalu" 是回文串。

解题思路

核心思路:双指针

  1. 用两个指针leftright分别遍历ab两个字符串,如果相等, 继续比较下一个字符;如果两个指针相遇,表示可以构成回文字符串;
  2. 如果两个指针没有相遇,仍有可能构成回文字符串,例如:
a = "axxx", b = "bvva".  a + vva

当指针leftx、指针rightv时比较失败,
我们此时可以组成avvabxxx,用双指针的办法判断这两个字符串是否是回文字符串即可。

代码示例(JAVA)

class Solution {
    public boolean checkPalindromeFormation(String a, String b) {
        return checkStrings(a, b) || checkStrings(b, a);
    }

    public boolean checkStrings(String a, String b) {
        int length = a.length();
        int left = 0, right = length - 1;
        while (a.charAt(left) == b.charAt(right) && left < right) {
            left++;
            right--;
        }
        // 有一半相同,肯定是,例如:a = "ulacfd", b = "jizalu"
        if (left >= right) {
            return true;
        }
        // a = "axxx", b = "bvva" a + vva
        return checkString(a, left, right) || checkString(b, left, right);
    }

    public boolean checkString(String a, int left, int right) {
        while (left < right && a.charAt(left) == a.charAt(right)) {
            left++;
            right--;
        }
        if (left >= right) {
            return true;
        }
        return false;
    }
}

时间复杂度:O(n)

相关文章

网友评论

      本文标题:2023-03-18 LeetCode:1616. 分割两个字符

      本文链接:https://www.haomeiwen.com/subject/tqyjrdtx.html