Word Break Problem

Backtracking AlgorithmsData StructureAlgorithms

In the input of this problem, one sentence is given without spaces, another dictionary is also provided of some valid English words. We have to find the possible ways to break the sentence in individual dictionary words.

We will try to search from the left of the string to find a valid word when a valid word is found, we will search for words in the next part of that string.

Input and Output

Input:
A set of valid words as dictionary, and a string where different words are placed without spaces.
Dictionary: {mobile, sam, sung, man, mango, icecream, and, go, i, love, ice, cream}
Given String: “ilovemangoicecream”
Output:
All possible ways to break the string into given words.
i love man go ice cream
i love man go icecream
i love mango ice cream
i love mango icecream

Algorithm

wordBreak(string, n, result)

Input − Given string, length of the string, the separated strings.

Output − Separate string using a dictionary.

Begin
   for i := 0 to n, do
      subStr := substring of given string from (0..i)
      if subStr is in dictionary, then
         if i = n, then
            result := result + subStr
            display the result
            return
         wordBreak(substring from (i..n-i), n-i, result, subStr, ‘space’)
   done
End

Example

#include <iostream>
#define N 13
using namespace std;

string dictionary[N] = {"mobile","samsung","sam","sung","man","mango", "icecream","and",
                        "go","i","love","ice","cream"};

int isInDict(string word){    //check whether the word is in dictionary or not
   for (int i = 0; i < N; i++)
      if (dictionary[i].compare(word) == 0)
         return true;
   return false;
}

void wordBreak(string str, int n, string result) {
   for (int i=1; i<=n; i++) {
      string subStr = str.substr(0, i);       //get string from 0 to ith location of the string
      if (isInDict(subStr)) {       //if subStr is found in the dictionary
         if (i == n) {
            result += subStr; //add substring in the result.
            cout << result << endl;
            return;
         }
         wordBreak(str.substr(i, n-i), n-i, result + subStr + " ");    //otherwise break rest part
      }
   }
}

int main() {
   string str="iloveicecreamandmango";
   wordBreak(str, str.size(),"");
}

Output

i love man go ice cream
i love man go icecream
i love mango ice cream
i love mango icecream
raja
Published on 10-Jul-2018 10:04:55
Advertisements