Monday, October 31, 2022

Word Break

Given a string and a dictionary of n words B, find out if A can be segmented into a space-separated sequence of dictionary words.

Note: From the dictionary each word can be taken any number of times and in any order.
Example 1:

Input:
n = 12
B = { "i", "like", "sam",
"sung", "samsung", "mobile",
"ice","cream", "icecream",
"man", "go", "mango" }
A = "ilike"
Output:
1
Explanation:
The string can be segmented as "i like".


Example 2:

Input:
n = 12
B = { "i", "like", "sam",
"sung", "samsung", "mobile",
"ice","cream", "icecream", 
"man", "go", "mango" }
A = "ilikesamsung"
Output:
1
Explanation:
The string can be segmented as 
"i like samsung" or "i like sam sung".

 

Your Task:
Complete wordBreak() function which takes a string and list of strings as a parameter and returns 1 if it is possible to break words, else return 0. You don't need to read any input or print any output, it is done by driver code.

(https://practice.geeksforgeeks.org/problems/word-break1352/1)

My Answer:

class Sol
{
    public static int wordBreak(String A, ArrayList<String> B )
    {
        //code here
        int startIdx = 0;
        int len = 0;
        String word = null;
        Collections.sort(B, Comparator.comparing(String::length).reversed());

        for (int i = 0 ; i < B.size() ; i++) {
            word = B.get(i);
            if (A.contains(word)) {
                startIdx = A.indexOf(word);
                len = word.length();
                A = A.substring(0,startIdx) + A.substring(startIdx+len);
                i--;
            }
        }
        
        if (A.length() == 0) {
            return 1;
        }
        
        return 0;
    }
}

No comments:

Post a Comment

Search in a matrix

  Problem: Given a matrix  mat [][] of size  N  x  M , where every row and column is sorted in increasing order, and a number  X  is given. ...