这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » word-break

共1条 1/1 1 跳转至

word-break

高工
2018-01-31 13:12:11     打赏

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".


思路:单词切分问题,

如果一个单词存在一种分解方法,分解后每一块都在字典中,那必定满足这么一个条件:对于该单词的最后一个分割点,这个分割点到单词末尾所组成的字符串是一个单词,而这个分割点到开头所组成的字符串也是可分解的,所以只要验证满足这个条件,我们则可以确定这个较长的字符串也是可分解的。


所以我们用外层循环控制待验证字符串的长度,而用内层的循环来寻找这么一个分割点,可以把字符串分成一个单词和一个同样可分解的字符串。同时,我们用数组记录下字符长度递增时的可分解的情况。以供之后使用,避免重复计算。




[cpp] view plain copy
  1. class Solution  

  2. {  

  3. public:  

  4.     bool wordBreak(string s, unordered_set<string> &dict)  

  5.     {  

  6.         int len = dict.size();  

  7.         bool book[len+1];  

  8.         book[0] = true;  

  9.         int i = 1;  

  10.         while (i<=dict.size())  

  11.         {  

  12.             int j = 0;  

  13.             while (j<i)  

  14.             {  

  15.                 string tmp = s.substr(j, i-j);  

  16.                 if (book[j] && dict.find(tmp)!=dict.end())  

  17.                 {  

  18.                     book[i] = true;  

  19.                     break;  

  20.                 }  

  21.                 j++;  

  22.             }  

  23.             i++;  

  24.         }  

  25.   

  26.         return book[len];  

  27.     }  

  28. }; 




共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]