LeetCode 1616. 分割兩個字串得到迴文串

2020-10-12 22:00:09

文章目錄

1. 題目

給你兩個字串 a 和 b ,它們長度相同。
請你選擇一個下標,將兩個字串都在 相同的下標 分割開。
由 a 可以得到兩個字串: aprefix 和 asuffix ,滿足 a = aprefix + asuffix ,同理,由 b 可以得到兩個字串 bprefix 和 bsuffix ,滿足 b = bprefix + bsuffix

請你判斷 aprefix + bsuffix 或者 bprefix + asuffix 能否構成迴文串。

當你將一個字串 s 分割成 sprefix 和 ssuffix 時, ssuffix 或者 sprefix 可以為空。
比方說, s = "abc" 那麼 "" + "abc""a" + "bc""ab" + "c""abc" + "" 都是合法分割。

如果 能構成迴文字串 ,那麼請返回 true,否則返回 false 。

請注意, x + y 表示連線字串 x 和 y 。

範例 1:
輸入:a = "x", b = "y"
輸出:true
解釋:如果 a 或者 b 是迴文串,那麼答案一定為 true ,因為你可以如下分割:
aprefix = "", asuffix = "x"
bprefix = "", bsuffix = "y"
那麼 aprefix + bsuffix = "" + "y" = "y" 是迴文串。

範例 2:
輸入:a = "ulacfd", b = "jizalu"
輸出:true
解釋:在下標為 3 處分割:
aprefix = "ula", asuffix = "cfd"
bprefix = "jiz", bsuffix = "alu"
那麼 aprefix + bsuffix = "ula" + "alu" = "ulaalu" 是迴文串。
 
提示:
1 <= a.length, b.length <= 105
a.length == b.length
a 和 b 都只包含小寫英文字母

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/split-two-strings-to-make-palindrome
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

2. 解題

class Solution {
public:
    bool checkPalindromeFormation(string a, string b) {
        int l = 0, r = a.size()-1;
        while(l < r && a[l] == b[r])//先找出a的字首  和 b的字尾的逆序 相同的
        {
            l++, r--;
        }
        if(ispalind(a.substr(l, r-l+1)) || ispalind(b.substr(l, r-l+1)))
            return true;
        l = 0, r = a.size()-1;
        while(l < r && b[l] == a[r])// 找出b的字首  和 a的字尾的逆序 相同的
        {
            l++, r--;
        }
        if(ispalind(a.substr(l, r-l+1)) || ispalind(b.substr(l, r-l+1)))
            return true;
        return false;
    }
    bool ispalind(string s)
    {
        int l = 0, r = s.size()-1;
        while(l < r)
        {
            if(s[l++] != s[r--])
                return false;
        }
        return true;
    }
};

256 ms 28.4 MB


我的CSDN部落格地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
Michael阿明