LeetCode 1181. 前后拼接(哈希map)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1181. 前后拼接(哈希map)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
1. 題目
給你一個「短語」列表 phrases,請你幫忙按規則生成拼接后的「新短語」列表。
「短語」(phrase)是僅由小寫英文字母和空格組成的字符串。「短語」的開頭和結尾都不會出現空格,「短語」中的空格不會連續出現。
「前后拼接」(Before and After puzzles)是合并兩個「短語」形成「新短語」的方法。
我們規定拼接時,第一個短語的最后一個單詞 和 第二個短語的第一個單詞 必須相同。
返回每兩個「短語」 phrases[i] 和 phrases[j](i != j)進行「前后拼接」得到的「新短語」。
注意,兩個「短語」拼接時的順序也很重要,我們需要同時考慮這兩個「短語」。另外,同一個「短語」可以多次參與拼接,但「新短語」不能再參與拼接。
請你按字典序排列并返回「新短語」列表,列表中的字符串應該是 不重復的 。
示例 1: 輸入:phrases = ["writing code","code rocks"] 輸出:["writing code rocks"]示例 2: 輸入:phrases = ["mission statement","a quick bite to eat","a chip off the old block","chocolate bar","mission impossible","a man on a mission","block party","eat my words","bar of soap"] 輸出:["a chip off the old block party","a man on a mission impossible","a man on a mission statement","a quick bite to eat my words","chocolate bar of soap"]示例 3: 輸入:phrases = ["a","b","a"] 輸出:["a"]提示: 1 <= phrases.length <= 100 1 <= phrases[i].length <= 100來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/before-and-after-puzzle
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
class Solution { public:vector<string> beforeAndAfterPuzzles(vector<string>& phrases) {unordered_map<string,vector<int>> front;//字符前綴,包含該字符的字符串的idxunordered_map<string,vector<int>> back;//字符后綴,包含該字符的字符串的idxsize_t idx1, idx2, len, i, j;for(i=0; i<phrases.size(); ++i){idx1 = phrases[i].find_first_of(' ');//第一個空格idx2 = phrases[i].find_last_of(' ');//最后一個空格if(idx1 != string::npos)//找到了front[phrases[i].substr(0,idx1)].push_back(i);else//沒找到front[phrases[i]].push_back(i);if(idx2 != string::npos)back[phrases[i].substr(idx2+1)].push_back(i);elseback[phrases[i]].push_back(i);}set<string> ans;for(auto it1 = back.begin(); it1 != back.end(); ++it1){if(!front.count(it1->first))//前綴不包含該單詞continue;len = it1->first.size();//包含,該代詞的長度for(i = 0; i < it1->second.size(); i++){idx1 = it1->second[i];//包含該后綴的單詞idxfor(j = 0; j < front[it1->first].size(); j++){idx2 = front[it1->first][j];//包含該前綴的單詞idxif(idx1 == idx2)continue;//同一個單詞ans.insert(phrases[idx1]+phrases[idx2].substr(len));}}}return vector<string>(ans.begin(), ans.end());} };12 ms 10.3 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 1181. 前后拼接(哈希map)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 314. 二叉树的垂直
- 下一篇: LeetCode 1674. 使数组互补