EASY TO UNDERSTAND Using Recursion
and Backtracking
you just required pen and paper and you are good to go to do this.
public static ArrayList<String> wordBreak(String s, ArrayList<String> dictionary) {
// Write your code here.
ArrayList<String> list= new ArrayList<>();
solve( s ,dictionary, list, " ");
return list;
}
public static void solve(String s,ArrayList<String> dictionary ,ArrayList<String> list, String ans){
if(s.length() ==0){
list.add(ans.trim());
return;
}
for(int i =0;i<s.length();i++){
String left =s.substring(0,i+1);
if(dictionary.contains(left)){
String ros = s.substring(i+1);
solve(ros,dictionary,list,ans+left+" ");
//ans.delete(del,ans.length());
}
}
return;
}
}
Time complextiy : O(n + 2^n) n→ for string length and 2^n for all possible partition
space complexity : O(n*2^n) stack space and for extra ArrayList