[LeetCode OJ] Word Break 解题报告
来源:互联网 发布:怎样查询电信网络密码 编辑:程序博客网 时间:2024/06/05 17:04
题目地址:https://oj.leetcode.com/problems/word-break-ii/
题意:给一个字典和一个字符串,用字典将字符串中的单词全部提取出来,返回所有可行的结果
解题思路:和word break2一样,由于我是从上往下做的题,所以就直接用了上一题的方法,加了一个canDo()排除了不可能的答案。
顺便提一下,这道题搜索能做。
#include<string>#include<vector>#include<unordered_set>#include<string.h>using namespace std;class Solution { vector<bool> *dp; bool flag[1024];public: bool wordBreak(string s, unordered_set<string> &dict) { if(!canDo(s,dict)){ return 0; } int len = s.size(); dp = new vector<bool>[len]; for(int i=0; i<len; ++i){ for(int j=i; j<len; ++j){ string str = s.substr(i,j-i+1); dp[i].push_back(match(str,dict)); } } return checkAns(0,s); } bool canDo(string s, unordered_set<string> &dict){memset(flag,0,sizeof(flag)); unordered_set<string>::iterator it; for(it=dict.begin();it!=dict.end();++it){ string str = (*it); for(int j=0;j<str.size();++j){ flag[str[j]-'a'] = 1; } } for(int j=0;j<s.size();++j){ if(!flag[s[j]-'a']) return 0; } return 1; } bool match(string& s1,unordered_set<string> &dict){ if(dict.find(s1)==dict.end()){ return 0; } else{ return 1; } } bool checkAns(int startPos,string& s){ if(startPos == s.size()){ return 1; } bool flag = 0; for(int len = s.size()-startPos; len>0; --len){ if(dp[startPos][len-1]){ flag = checkAns(startPos+len,s); if(flag) break; } } return flag; }};
0 0
- [LeetCode OJ] Word Break II 解题报告
- [LeetCode OJ] Word Break 解题报告
- LeetCode Word Break 解题报告
- 【LeetCode】Word Break 解题报告
- [LeetCode]Word Break,解题报告
- Word Break [Leetcode解题报告]
- LeetCode — Word Break II 解题报告
- LeetCode — Word Break 解题报告
- LeetCode Word Break II 解题报告
- 【LeetCode】Word Break II 解题报告
- [leetcode] 139. Word Break 解题报告
- [leetcode] 140. Word Break II 解题报告
- [Leetcode] 139. Word Break 解题报告
- [Leetcode] 140. Word Break II 解题报告
- word break解题报告
- LeetCode OJ:Word Break
- LeetCode OJ - Word Break
- LeetCode OJ Word Break
- 集合中的元素无故被擅改,到底是怎么回事
- Codeforces 377B . Preparing for the Contest【优先队列】
- webapi摘要认证
- 查看虚拟内存的使用
- NYOJ 题目330一个简单的数学题(数学)
- [LeetCode OJ] Word Break 解题报告
- php绝对路径与相对路径之间关系的的深入研究
- Machine Learning Notes - PLA
- 栈与队列的实现__ 两个栈实现队列 vs 两个队列实现栈
- 深入C++的拷贝构造和赋值函数 (深拷贝,浅拷贝)
- Kinect for Windows SDK v2.0 开发笔记 (十一) 高清面部帧(2) 面部特征对齐
- android:padding和android:margin的区别
- 一元高次方程的求解
- Direct2D 1.1 开发笔记 特效篇(二) 简单的自定义特效