#include <iostream>
#include <vector>
int isInDict(std::string word, std::vector<std::string> dict) {
int dictsize = dict.size();
for (int i = 0; i < dictsize; i++) {
if (dict[i].compare(word) == 0) {
return true;
}
}
return false;
}
void wordBreak(std::string str, int strsize, std::string result, std::vector<std::string> dict) {
for (int i = 1; i <= strsize; i++) {
std::string subStr = str.substr(0, i);
if (isInDict(subStr, dict)) {
if (i == strsize) {
result += subStr;
std::cout << result << std::endl;
return;
}
wordBreak(str.substr(i, strsize - i), strsize - i, result + subStr + " ", dict);
}
}
}
int main() {
std::string str = "butterflyplaybasketballwithbags";
std::vector<std::string> dict = {"butterfly", "basketball", "bagpiper", "and", "play",
"with", "butter", "fly", "basket", "ball", "bags"};
wordBreak(str, str.size(), "", dict);
}
/*
run:
butter fly play basket ball with bags
butter fly play basketball with bags
butterfly play basket ball with bags
butterfly play basketball with bags
*/