单词切分-lintcode
来源:互联网 发布:网站源码查询 编辑:程序博客网 时间:2024/06/07 19:08
单词切分
给出一个字符串s和一个词典,判断字符串s是否可以被空格切分成一个或多个出现在字典中的单词。
您在真实的面试中是否遇到过这个题? Yes
样例
给出
s = "lintcode"
dict = ["lint","code"]
返回 true 因为"lintcode"可以被空格切分成"lint code"
刚开始第一眼看到这个题的时候,有点没思路,想了一下,简单敲出了如下代码,通过率41%。
C++ Code
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
static bool wordBreak1(string s, unordered_set<string> &dict)
{
// write your code here
bool flag = false;
if (s.size() == 0 || dict.empty()) return flag;
string res = "";
for (int i = 0; i < s.size(); i++)
{
res += s[i];
if (auto iter = dict.find(res) != dict.end())
{
flag = true;
return flag;
}
}
return flag;
}
{
// write your code here
bool flag = false;
if (s.size() == 0 || dict.empty()) return flag;
string res = "";
for (int i = 0; i < s.size(); i++)
{
res += s[i];
if (auto iter = dict.find(res) != dict.end())
{
flag = true;
return flag;
}
}
return flag;
}
后面看了一下是自己思路有些问题,这个题要用动态规划的思路来解,代码如下:
i-j的长度要小于或者等于字典中的最长字符串。
C++ Code
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
class Solution
{
public:
/**
* @param s: A string s
* @param dict: A dictionary of words dict
*/
int getMaxlength(unordered_set<string> &dict)
{
int maxLength = 0;
for(auto iter = dict.begin(); iter != dict.end(); ++iter)
{
maxLength = maxLength > (*iter).size() ? maxLength : (*iter).size();
}
return maxLength;
}
bool wordBreak(string s, unordered_set<string> &dict)
{
// write your code here
if(s.empty()) return true;//这两句边界条件不加的话时间会多耗时
if(dict.empty()) return false;
int wordMaxlength = getMaxlength(dict);
vector<bool> Cut = vector<bool>(s.size() + 1, false);
Cut[0] = true;
for(int i = 1; i < s.size() + 1; i++)
{
for(int j = i; j >= 1 && j >= (i - wordMaxlength); j--)
{
if(Cut[j - 1] == true && dict.count(s.substr(j - 1, i - j + 1)))
{
Cut[i] = true;
break;
}
}
}
return Cut[s.size()];
}
};
用main测试一下,通过编译:
int main()
{
unordered_set<string> dict;
dict.insert("");
dict = {};
bool wordBreak = Solution::wordBreak("a", dict);
return 0;
}
{
public:
/**
* @param s: A string s
* @param dict: A dictionary of words dict
*/
int getMaxlength(unordered_set<string> &dict)
{
int maxLength = 0;
for(auto iter = dict.begin(); iter != dict.end(); ++iter)
{
maxLength = maxLength > (*iter).size() ? maxLength : (*iter).size();
}
return maxLength;
}
bool wordBreak(string s, unordered_set<string> &dict)
{
// write your code here
if(s.empty()) return true;//这两句边界条件不加的话时间会多耗时
if(dict.empty()) return false;
int wordMaxlength = getMaxlength(dict);
vector<bool> Cut = vector<bool>(s.size() + 1, false);
Cut[0] = true;
for(int i = 1; i < s.size() + 1; i++)
{
for(int j = i; j >= 1 && j >= (i - wordMaxlength); j--)
{
if(Cut[j - 1] == true && dict.count(s.substr(j - 1, i - j + 1)))
{
Cut[i] = true;
break;
}
}
}
return Cut[s.size()];
}
};
用main测试一下,通过编译:
int main()
{
unordered_set<string> dict;
dict.insert("");
dict = {};
bool wordBreak = Solution::wordBreak("a", dict);
return 0;
}
这个题是一个典型的字符串的题,后面自己应该多做练习!
阅读全文
0 0
- LintCode- 单词切分
- LintCode 单词切分
- lintcode,单词切分
- lintcode(107)单词切分
- LintCode:单词切分
- LintCode 单词切分
- 单词切分-LintCode
- 单词切分-lintcode
- LintCode:M-单词切分
- [LintCode 107] 单词切分(Python)
- LINTCODE——单词切分
- 单词切分
- 单词切分
- 单词切分
- 单词切分
- 题目:单词切分
- lintcode_单词切分
- Java实现-单词切分
- 一个故事告诉你比特币的原理及运作机制
- 简单分析View中的事件传递
- Python爬虫的工作原理!
- 设计模式之禅笔记-代理模式
- 第二天:OpenCV基本的绘图函数
- 单词切分-lintcode
- STM32 Tutorial: #1 Buy a board
- Linux 用户ID和组ID
- hadoop单机安装
- java全自动生成krpano全景漫游
- PHP开发环境搭建--Windows
- Qt5.2应用SQLite小结
- jQuery_插件扩展
- 共享单车管理系统