單詞拆分II

2021-08-13 22:18:56 字數 1760 閱讀 3318

已知

給一字串s和單詞的字典dict,在字串中增加空格來構建乙個句子,並且所有單詞都來自字典。

返回所有有可能的句子。

示例:

給一字串lintcode,字典為["de", "ding", "co", "code", "lint"]

則結果為["lint code", "lint co de"]。

思路:

用動態規劃的思路,這道題目按照遞迴是很容易解決的。

首先,我們找到字典dict中所有可以作為字串s的開頭的string;

然後,結果返回為 string + 函式(餘下的s部分,字典dict)

因為返回是乙個list集合,所以list中所有資料都要和string連線一次(我在相應**會特別注釋)

當然,實際考慮到一些特殊情況,執行效率可能還能夠有所提公升,但是基礎的**部分是相當簡單的。

**如下:

public class solution 

/*//特殊情況1:s中乙個元素是dict中不存在的,返回必為空

//"aaaaaabaaaaaaaaaaaaa"

//["a","aa","aaa","aaaa","aaaaa","aaaaaa"]

setset1 = calculate(s);

setset2 = calculate(tostring(worddict));

if (!set2.containsall(set1))

//這裡的**比較無奈,因為注釋以外的**時間複雜度不高,執行很快,但是通不過,也就是下面這種特殊情況時間複雜度過高

//特殊情況2:

//"aaaaaaaabaaaaaaaaaa"

//["a","b","aa","aaa","aaaa","aaaaa","aaaaaa"]

int count = 0;

string unique = null;

for (string temp : worddict)

}if (count == 1 && unique(unique, worddict))

}return ret;}*/

for (string temp : worddict)

if (s.startswith(temp)) }}

return ret;

}private static boolean unique(string unique, set

worddict)

}return count == 1;

}private static string tostring(set

worddict)

return ret.tostring();

}private static set

calculate(string s)

return ret;

}}

以上注釋外的**是初始**,其實即使是最後乙個案例,通過時間也是很短的,總共128*512中情況,但是檢測系統不給通過,無奈之下有了注釋內的**,將s分成左右兩段分別獲得list(但是**通用性還是不高,只是用來應付一下,真正的高通用性應該是dict中的某資料是dict中唯一含有特定字元的資料,且這個資料出現在了s中,但是這其實已經是特殊情況了,放在正常情況下反而增加了很多額外工作量,因此就沒深入去寫了)

以上,謝謝您的閱讀,希望對您有所幫助ヽ( ̄▽ ̄)ノ

單詞拆分 II

單詞拆分 ii 給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。說明 分隔時可以重複使用字典中的單詞。你可以假設字典中沒有重複的單詞。示例 1 輸入 s catsanddog worddic...

140 單詞拆分 II

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。說明 分隔時可以重複使用字典中的單詞。你可以假設字典中沒有重複的單詞。示例 1 輸入 s catsanddog worddict cat ca...

leetcode 單詞拆分II

這道題一眼看去,就死類似於單詞拆分i的深度優先搜尋就可以解決的題目,不過這裡公升級了,就是要把每一種切分結果都要返回。具體 如下 class solution def wordbreak self,s str,worddict list str list str mem tmp self.dfs s...