題目描述:
給你乙個「短語」列表 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
通過次數1,266提交次數3,525
方法1:
(1)使用雜湊來快速確定每個字串的首個單詞和最後乙個單詞;
(2)使用set來去除重複的拼接字串;
(3)先對每個字串進行分解,找出首個單詞和最後乙個單詞,和對應的字串的索引一起儲存到對應的雜湊中;
(4)遍歷儲存最後乙個單詞的雜湊,找每個元素的字串是否在儲存第乙個單詞的雜湊中存在,若存在則生成對應的字串,儲存到set中來去重;
class
solution
mp_front[str.
substr(0
,pos)].
push_back
(index)
;//將當前字串的第一單詞和對應的索引儲存到對應的雜湊中
//找出最後乙個單詞
pos=str.
size()
-1;while
(pos>=
0&&str[pos]
!=' '
) mp_back[str.
substr
(pos+1)
].push_back
(index)
;//將當前字串的最後乙個單詞和對應的索引儲存到對應的雜湊中
++index;
} set st;
//儲存拼接生成的字串,可以實現去重
//遍歷儲存最後乙個單詞的雜湊
for(
auto
& it:mp_back)
st.insert
(phrases[i]
+phrases[j]
.substr
(it.first.
size()
));}
}}}return vector
(st.
begin()
,st.
end())
;//返回結果}}
;
1181 整數奇偶排序
時間限制 1000 ms 記憶體限制 65536 kb 提交數 2427 通過數 1383 給定10個整數的序列,要求對其重新排序。排序要求 1.奇數在前,偶數在後 2.奇數按從大到小排序 3.偶數按從小到大排序。輸入一行,包含10個整數,彼此以乙個空格分開,每個整數的範圍是大於等於0,小於等於10...
1181 變形課 深度搜尋
problem description 呃.變形課上harry碰到了一點小麻煩,因為他並不像hermione那樣能夠記住所有的咒語而隨意的將乙個棒球變成刺蝟什麼的,但是他發現了變形咒語的乙個統一規律 如果咒語是以a開頭b結尾的乙個單詞,那麼它的作用就恰好是使a物體變成b物體.harry已經將他所會的...
1181 字元排序
字元排序 給定乙個字串str和兩個字元a,b,將str中ascii碼處於a,b之間 含a b 的字元按ascii碼從大到小排序,其他字元位置不變.輸出排序後的字串。輸入只有兩行 第一行給出乙個字串str 第二行給出兩個字元a,b,以乙個空格間隔 字串長度不大於3000。輸出只有一行,給出排序後的字串...