Medium

Split Two Strings to Make PalindromeC++

Full explanation · Time O(n) · Space O(1)

// Time:  O(n)
// Space: O(1)

class Solution {
public:
    bool checkPalindromeFormation(string a, string b) {
        return check(a, b) || check(b, a);
    }

private:
    bool isPalindrome(const string &s, int i, int j) {
        for (; i < j; ++i, --j) {
            if (s[i] != s[j]) {
                return false;
            }
        }
        return true;
    }
    
    bool check(const string &a, const string &b) {
        for (int i = 0, j = size(b) - 1; i < j; ++i, --j) {
            if (a[i] != b[j]) {
                return isPalindrome(a, i, j) || isPalindrome(b, i, j);
            }
        }
        return true;
    }
    
};