139题单词拆分
链接: link
#include<iostream>
#include<sstream>
#include<string>
#include<vector>
#include<algorithm>
#include<unordered_set>
using namespace std;int main() {// 实现输入第一行为s字符串。// 第二行为wordDict,用逗号隔开。string s;getline(cin, s);string line;vector<string> wordDict;getline(cin, line);istringstream iss(line);string single;while (getline(iss, single, ',')){wordDict.push_back(single);}// 函数处理阶段。// 利用动态规划处理// 首先定义dp数组vector<bool> dp(s.size()+1, false);// 把vector转化为setunordered_set<string> dictSet(wordDict.begin(), wordDict.end());// 初始化数组dp[0] = true;// 开始递推,因为字符串中单词有顺序,因此需要先遍历背包for(int i = 1; i <= s.size(); i++){// 要注意j一定是小于i的。for(int j = 0; j < i; j++){string su_s = s.substr(j, i-j); // 截取从j开始到i之间大小的字符串if(dictSet.find(su_s) != dictSet.end() && dp[j]){dp[i] = true;}}}cout<<"str can finded!"<< dp[s.size()];// cout<<"s :"<<s<<endl;// //cout<<"词典是:"<<endl;// for(auto c: wordDict){// cout<< c<<" ";// }// cout<<endl;return 0;
}