class Solution {
public:
bool isPalin(string tmp)
{
int n=tmp.size();
int i=0,j=n-1;
while(i<j)
{
if(tmp[i]!=tmp[j])
return false;
i++;
j--;
}
return true;
}
vector<vector<int>> palindromePairs(vector<string>& words) {
vector<vector<int>> ans;
unordered_map<string,int> dict;
int n=words.size();
int i,j;
for(i=0;i<n;i++)
dict[words[i]]=i;
for(i=0;i<n;i++)
{
int len=words[i].size();
dict.erase(words[i]);
for(j=0;j<=len;j++)
{
string sl=words[i].substr(0,j);
string sr=words[i].substr(j);
string revL(sl.rbegin(),sl.rend());
string revR(sr.rbegin(),sr.rend());
if(isPalin(sl)&&dict.find(revR)!=dict.end())
{
ans.push_back(vector<int>{dict[revR],i});
}
if(j!=len&&isPalin(sr)&&dict.find(revL)!=dict.end())
{
ans.push_back(vector<int>{i,dict[revL]});
}
}
dict[words[i]]=i;
}
return ans;
}
};