Word Break Problem Using Backtracking
Word Break Problem Using Backtracking
Backtracking
PPT by,
Chaitanya Kumar P.A.S
What Is the Problem
Word Break Problem using
Backtracking
Given a valid sentence without any spaces between the
words and a dictionary of valid English words, find all possible
ways to break the sentence in individual dictionary words.
Example
Consider the following dictionary
{ i, like, sam, sung, samsung, mobile, ice,
cream, icecream, man, go, mango}
Input: "ilikesamsungmobile“
Output: i like sam sung mobile
i like samsung mobile
Input: "ilikeicecreamandmango"
Output: i like ice cream and man go
i like ice cream and mango
i like icecream and man go
i like icecream and mango
Why backtracking– Assume “ilovebacktrackingicecream”
string dictionary[] =
{"mobile","samsung","sam","sung",
"man","mango", "icecream","and",
"go","i","love","ice","cream","back","trac
k“,”backtrack”};
Here ,
string dictionary[]=
{"mobile","samsung","sam","sung“,"man",
"mango",
"icecream","and","go","i","love","ice","cre
am"};
Int
n=sizeof(dictionary)/sizeof(dictionary[0]);
return 0;
}
Wordbreak(string str)
void wordBreak(string str)
{
// last argument is prefix
wordBreakUtil(str,str.size
(), "");
}
substr
wordbreakutil
void wordBreakUtil(string str, int n, string
result)
{
for (int i=1; i<=n; i++)
{
string prefix = str.substr(0, i);
if (dictionaryContains(prefix))
{
if (i == n)
{
result += prefix;
cout << result << endl; //print
result
return;
}
wordBreakUtil(str.substr(i, n-i), n-
i,result + prefix + " ");
}
}
}//end function
#include <iostream>
Program
using namespace std;
int dictionaryContains(string &word)
{
string dictionary[] = {"mobile","samsung","sam","sung", "man","mango", "icecream","and","go","i","love","ice","cream","back","track","backtrack"};
int n = sizeof(dictionary)/sizeof(dictionary[0]);
for (int i = 0; i < n; i++)
if (dictionary[i].compare(word) == 0)
return true;
return false;
}
void wordBreakUtil(string str, int size, string result);
void wordBreak(string str)
{
// last argument is prefix
wordBreakUtil(str, str.size(), "");
}
void wordBreakUtil(string str, int n, string result)
{
if (dictionaryContains(prefix))
{
if (i == n)
{
result += prefix;
cout << result << endl; //print result
return;
}
wordBreakUtil(str.substr(i, n-i), n-i,
result + prefix + " ");
}
}
}
int main()
{
cout << "First Test:\n";
wordBreak("ilovebacktrackicecream");
return 0;
}
output
Thanking u ,
Chaitanya Kumar P.A.S