Leetcode 336 Solution

This article provides solution to leetcode question 336 (palindrome-pairs)

https://leetcode.com/problems/palindrome-pairs

Solution

class Solution {
public:
    bool ispar(const string& str, int l, int r)
    {
        while (l < r)
        {
            if (str[l] != str[r])
                break;

            l++;
            r--;
        }

        return l >= r;
    }

    vector<vector<int>> palindromePairs(vector<string>& words) {
        map<string, int> pos;
        vector<vector<int>> res;

        for (int i = 0; i < words.size(); i++)
            pos[words[i]] = i;

        for (int i = 0; i < words.size(); i++)
        {
            string word = words[i];
            string rword = word;
            reverse(rword.begin(), rword.end());

            if (pos.find(rword) != pos.end() && pos[rword] != i)
            {
                vector<int> pair;
                pair.push_back(pos[rword]);
                pair.push_back(i);
                res.push_back(pair);
            }

            for (int j = 0; j < word.size(); j++)
            {
                if (ispar(rword, rword.size() - 1 - j, rword.size() - 1) && pos.find(rword.substr(0, rword.size() - 1 - j)) != pos.end())
                {
                    vector<int> pair;
                    pair.push_back(pos[rword.substr(0, rword.size() - 1 - j)]);
                    pair.push_back(i);
                    res.push_back(pair);
                }

                if (ispar(rword, 0, j) && pos.find(rword.substr(j + 1)) != pos.end())
                {
                    vector<int> pair;
                    pair.push_back(i);
                    pair.push_back(pos[rword.substr(j + 1)]);
                    res.push_back(pair);
                }
            }
        }

        return res;
    }
};