LeetCode139:Word Break
Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.
For example, given
s = “l(fā)eetcode”,
dict = [“l(fā)eet”, “code”].
Return true because “l(fā)eetcode” can be segmented as “l(fā)eet code”.
記得最開始做動態(tài)規(guī)劃的題時是打開過這道題的,可是那時沒什么思路。如今動態(tài)規(guī)劃的題刷了不少了,今天再做這道題時非常快就想出了狀態(tài)和狀態(tài)轉移方程。不能不說還是有點進步。
定義A[i]表示0到下標為i的子字符是否能被切割成dict中的多個單詞。
那么A[i]與A[j],0<=j< i都有關系,即A[i]與前A[]中的前i-1項都有關系,詳細為:
…..
這樣一直遍歷到A[i-1]位置。
在上面的遍歷過程中假設遍歷到某一步j,A[j]=1而且j+1到i表示的字符串出如今dict中,表示前j個字符串能切割成dict中的單詞,j+1到i中的字符串串也能切割成dict中的單詞。這樣表示前i個字符能被切割成dict中的單詞。
實際編寫代碼時,j能夠從i開始倒著開始遍歷,這樣能夠降低遍歷的次數(shù)。
runtime:4ms
class Solution { public:bool wordBreak(string s, unordered_set<string>& wordDict) {int length=s.size();int *A=new int[length]();for(int i=0;i<length;i++){for(int j=i;j>=0;j--){if(j==i){A[i]=isExist(s,0,i,wordDict);}else if(A[j]==1){A[i]=isExist(s,j+1,i,wordDict);}if(A[i]==1)break;}}return A[length-1]==1;}int isExist(string &s,int first,int last,unordered_set<string> &wordDict){string str=s.substr(first,last-first+1);if(wordDict.count(str))return 1;elsereturn 0;}};轉載于:https://www.cnblogs.com/zsychanpin/p/7197159.html
總結
以上是生活随笔為你收集整理的LeetCode139:Word Break的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 强制将IE8设置为IE7兼容模式来解析网
- 下一篇: QT中IDirect3DDevice9的