前往
大廳
主題

LeetCode - 1813. Sentence Similarity III 解題心得

Not In My Back Yard | 2024-01-30 12:00:04 | 巴幣 0 | 人氣 59

題目連結:


題目意譯:
一個句子為一個字詞列表,其每個字詞之間由單一一個空白所隔開且不存在前導與末尾空白。例如說,"Hello World" 、 "HELLO" 、 "hello world hello world" 都是句子。這些字詞只會由小寫和大寫英文字母所組成。

兩個句子 sentence1 和 sentence2 如果存在著另一個句子(其可為空)可以插入到其中一個句子中使得兩句子變為一樣,則兩者是相似的。例如,sentence1 = "Hello my name is Jane" 而 sentence2 = "Hello Jane" 可以藉由插入 "my name is" 到 sentence2 中的 "Hello" 和 "Jane" 之間來使得兩個句子變成一樣。

給定兩個句子 sentence1 和 sentence2,如果 sentence1 和 sentence2 是相似的,則回傳真(True);反之,則回傳假(False)。

限制:
1 ≦ sentence1.length, sentence2.length ≦ 100
sentence1 和 sentence2 由小寫與大寫英文字母以及空白組成。
sentence1 和 sentence2 中的字詞之間以單一一個空白所組成。



範例測資:
範例 1:
輸入: sentence1 = "My name is Haley", sentence2 = "My Haley"
輸出: true
解釋: sentence2 可以藉由插入 "name is" 到 "My" 和 "Haley" 之間來變成 sentence1。

範例 2:
輸入: sentence1 = "of", sentence2 = "A lot of words"
輸出: false
解釋: 沒有句子可以插入到其中一個句子中來使得兩句子變為相同。

範例 3:
輸入: sentence1 = "Eating right now", sentence2 = "Eating"
輸出: true
解釋: sentence2 可以藉由插入 "right now" 到句子結尾來變成 sentence1。


解題思維:
先把兩個句子的字詞分離出來形成兩個字串陣列後,來比較兩者。

情況一,插入的字詞應出現於某個句子的開頭:這代表著兩個字串陣列的結尾若干個字詞是一模一樣的。所以我們可以將這些一樣的字詞移除。最後其中較短的陣列將會先變為空。

情況二,插入的字詞應出現於某個句子的結尾:類似於情況一,我們可以把兩個陣列開頭的若干個相同字詞移除掉。一樣,較短者將會變為空陣列。

情況三,插入的字詞應出現於某個句子的中間:類似於情況一加上情況二,現在較短的句子的前面若干個會對應到另一個句子前面若干個,而剩下的則是對應到另一個句子的結尾相應數量之字詞。所以我們可以先移除掉兩個陣列中前面一樣的字詞,再移除後面一樣的字詞。此時較短者依舊會變為空。

情況四,不需要插入,兩者本來就一樣:按照上面的方式來移除相同字詞,只是現在兩者會同時變為空。

可以看到以上四種情況包含了所有可能的插入情況,而且如果我們移除兩陣列前面以及後面相同的字詞會使得至少某一個陣列變為空。

因此如果我們照這樣移除字詞之後,兩個陣列如果「都沒有」變成空的,則代表著沒有存在「單一一個」句子可以插入到某個句子中來使得兩個句子一樣(不然它應當滿足其中一種情況)。因此此時應回傳假;反之,有某個陣列變成空的,則代表存在著這樣子的句子,因此回傳真。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作