336. Palindrome Pairs
来源:互联网 发布:银魂cos淘宝 编辑:程序博客网 时间:2024/05/16 09:29
Given a list of unique words, find all pairs of distinct indices(i, j)
in the given list, so that the concatenation of the two words, i.e.words[i] + words[j]
is a palindrome.
Example 1:
Given words
= ["bat", "tab", "cat"]
Return [[0, 1], [1, 0]]
The palindromes are ["battab", "tabbat"]
Example 2:
Given words
= ["abcd", "dcba", "lls", "s", "sssll"]
Return [[0, 1], [1, 0], [3, 2], [2, 4]]
The palindromes are ["dcbaabcd", "abcddcba", "slls", "llssssll"]
Credits:
Special thanks to @dietpepsi for adding this problem and creating all test cases.
【思路】
x和y能形成回文的就2种情况: 1、xright | xleft | y 2、 y | xright | xleft
第一种情况 遍历x 直到发现 到某一个节点 xleft 是回文的 而 xright ==y 也就是前一部分能在hashtable中找到 而后一部分是回文的
第二种情况相反 前一部分是回文的 而后一部分能在hashtable 中找到
注意点 在hashtable中查找时 erase掉当前x
先把所有单词 放入hashtable 对每一个单词从左到右 遍历一遍,
class Solution {public: vector<vector<int>> palindromePairs(vector<string>& words) { vector<vector<int>> ans; unordered_map<string,int>dic; int size =words.size(); for(int i =0l;i<size;i++){ dic[words[i]]=i; } for(int i =0;i<size;i++){ int len =words[i].length(); dic.erase(words[i]); for(int j =0;j<=len;j++){ string subl= words[i].substr(0,j); string subr =words[i].substr(j); string revl,revr; revl =revl.assign(subl.rbegin(),subl.rend()); revr =revr.assign(subr.rbegin(),subr.rend()); if (j != len && isPalindrome(subr) && dic.count(revl)) ans.push_back(vector<int> {i, dic[revl]}); if (isPalindrome(subl) && dic.count(revr)) ans.push_back(vector<int> {dic[revr], i}); } dic[words[i]]=i; } return ans; } bool isPalindrome(string s) { int left = 0, right = s.length()-1; while (left < right) { if (s[left] != s[right]) return false; left++; right--; } return true; } };
- LeetCode 336. Palindrome Pairs
- LeetCode 336. Palindrome Pairs
- leetcode 336. Palindrome Pairs
- LeetCode 336. Palindrome Pairs
- leetcode.336. Palindrome Pairs
- 336. Palindrome Pairs
- 336. Palindrome Pairs
- [leetcode] 336. Palindrome Pairs
- 336. Palindrome Pairs
- LeetCode-336.Palindrome Pairs
- LeetCode 336. Palindrome Pairs
- 336. Palindrome Pairs
- 336. Palindrome Pairs
- [LeetCode]336. Palindrome Pairs
- 336. Palindrome Pairs
- 336. Palindrome Pairs
- leetcode 336. Palindrome Pairs
- 336. Palindrome Pairs
- python全局变量的使用
- Node 的模块化思想
- 初学C#--5
- 应用Grunt进行CSS压缩
- 7. Reverse Integer
- 336. Palindrome Pairs
- 机器学习算法及代码实现--支持向量机
- 单元表格图片适应问题
- 通过WindowManager创建窗口
- 机器学习之入门篇(了解机器学习)
- c语言中全局变量在多个文件中使用
- 蓝桥杯 打印十字图
- 回文数回文字符串判断
- FIFO在FPGA中应用的一些知识点