首页 > 代码库 > [LeetCode] Word Break
[LeetCode] 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 = "leetcode"
,
dict = ["leet", "code"]
.
Return true because "leetcode"
can be segmented as "leet code"
.
1 #include <iostream> 2 #include <string> 3 #include <set> 4 #include <cstdio> 5 6 using namespace std; 7 8 set<string> myset; 9 bool ** pmatrix = NULL; 10 11 template<typename T> 12 void BuildMatrix(T *** pmaze,unsigned row_num,unsigned column_num) 13 { 14 *pmaze = new T*[row_num]; 15 for(unsigned i=0;i<row_num;++i){ 16 (*pmaze)[i] = new T[column_num]; 17 } 18 } 19 20 template<typename T> 21 void ReleaseMatrix(T ***pmaze,unsigned row_num) 22 { 23 if(!pmaze) return; 24 25 for(unsigned i=0;i<row_num;++i){ 26 delete [](*pmaze)[i]; 27 } 28 29 delete [](*pmaze); 30 } 31 32 void FindWord(int length){ 33 int i=0; 34 for(i=0;i<length;++i){ 35 for(int j=i;j<length;++j){ 36 if(pmatrix[i][j]){ 37 i = j+1; 38 } 39 } 40 } 41 42 if(i==length+1) cout<<"true"<<endl; 43 else cout<<"false"<<endl; 44 } 45 46 void Solve(){ 47 myset.clear(); 48 49 string strtomatch; 50 int dicwordnum = 0; 51 cin>>dicwordnum; 52 53 for(int i=0;i<dicwordnum;++i){ 54 cin>>strtomatch; 55 myset.insert(strtomatch); 56 } 57 58 cin>>strtomatch; 59 unsigned strlength = strtomatch.length(); 60 61 BuildMatrix(&pmatrix,strlength,strlength); 62 63 for(unsigned i=0;i<strlength;++i){ 64 for(unsigned j=0;j<strlength;++j){ 65 string strdata; 66 strdata.assign(strtomatch,i,j-i+1); 67 if(myset.find(strdata)!=myset.end()){ 68 pmatrix[i][j] = true; 69 } 70 } 71 } 72 73 for(int i=strlength-1;i>=0;--i){ 74 bool isallfalse = false; 75 for(int j = i;j<strlength;++j){ 76 if(pmatrix[i][j]){ 77 isallfalse = true; 78 break; 79 } 80 } 81 82 if(isallfalse){ 83 for(int j = 0;j<strlength;++j){ 84 pmatrix[j][i-1] = false; 85 } 86 } 87 } 88 89 FindWord(strlength); 90 91 ReleaseMatrix(&pmatrix,strtomatch.length()); 92 } 93 94 int main() 95 { 96 freopen("txt.in","r",stdin); 97 freopen("txt.out","w",stdout); 98 99 int case_num = 0;100 cin>>case_num;101 102 for(int i=0;i<case_num;++i){103 cout<<"Case "<<i+1<<": ";104 Solve();105 }106 107 return 0;108 }
txt.in
41a a2what is whats3hello nice to helloto5Kobe Carter LeBron Jordan Iverson Yao
txt.out
Case 1: trueCase 2: falseCase 3: trueCase 4: false
[LeetCode] Word Break
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。