package com.ferhatelmas;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
class Tokenizer {
private HashMap
<String, String
> dict
;
public Tokenizer
(String[] words
) { this.
dict = new HashMap
<String, String
>();
dict.put(sorted(word), word);
}
char[] chars = w.toCharArray();
}
public List
<String
> getWords
(String sentence
) {
if(sentence.isEmpty()) return new ArrayList<String>();
List<String> words = new ArrayList<String>();
int len = sentence.length();
for(int i=1; i<=len; i++) {
String token
= sorted
(sentence.
substring(0, i
)); if(dict.containsKey(token)) {
List<String> found = getWords(sentence.substring(i));
if(found != null) {
words.add(dict.get(token));
words.addAll(found);
break;
}
}
}
return words.size() == 0 ? null : words;
}
public static void main
(String[] args
) { Tokenizer t
= new Tokenizer
(new String[] {"ferhat",
"elmas",
"huseyn",
"gasimov",
"that",
"is",
"a",
"sample"}); List<String> words = t.getWords("usnyehttahsiaaspmle");
if(words != null) // unmatched returns null since empty string returns empty list
}
}
cGFja2FnZSBjb20uZmVyaGF0ZWxtYXM7CgppbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CmltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKaW1wb3J0IGphdmEudXRpbC5MaXN0OwoKIGNsYXNzIFRva2VuaXplciB7CgogIHByaXZhdGUgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gZGljdDsKCiAgcHVibGljIFRva2VuaXplcihTdHJpbmdbXSB3b3JkcykgewogICAgdGhpcy5kaWN0ID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CgogICAgZm9yKFN0cmluZyB3b3JkIDogd29yZHMpCiAgICAgIGRpY3QucHV0KHNvcnRlZCh3b3JkKSwgd29yZCk7CiAgfQoKICBwdWJsaWMgc3RhdGljIFN0cmluZyBzb3J0ZWQoU3RyaW5nIHcpIHsKICAgIGNoYXJbXSBjaGFycyA9IHcudG9DaGFyQXJyYXkoKTsKICAgIEFycmF5cy5zb3J0KGNoYXJzKTsKICAgIHJldHVybiBuZXcgU3RyaW5nKGNoYXJzKTsKICB9CgogIHB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0V29yZHMoU3RyaW5nIHNlbnRlbmNlKSB7CgogICAgaWYoc2VudGVuY2UuaXNFbXB0eSgpKSByZXR1cm4gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CgogICAgTGlzdDxTdHJpbmc+IHdvcmRzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CiAgICBpbnQgbGVuID0gc2VudGVuY2UubGVuZ3RoKCk7CiAgICBmb3IoaW50IGk9MTsgaTw9bGVuOyBpKyspIHsKICAgICAgU3RyaW5nIHRva2VuID0gc29ydGVkKHNlbnRlbmNlLnN1YnN0cmluZygwLCBpKSk7CiAgICAgIGlmKGRpY3QuY29udGFpbnNLZXkodG9rZW4pKSB7CiAgICAgICAgTGlzdDxTdHJpbmc+IGZvdW5kID0gZ2V0V29yZHMoc2VudGVuY2Uuc3Vic3RyaW5nKGkpKTsKCiAgICAgICAgaWYoZm91bmQgIT0gbnVsbCkgewogICAgICAgICAgd29yZHMuYWRkKGRpY3QuZ2V0KHRva2VuKSk7CiAgICAgICAgICB3b3Jkcy5hZGRBbGwoZm91bmQpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHdvcmRzLnNpemUoKSA9PSAwID8gbnVsbCA6IHdvcmRzOwogIH0KCiAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgVG9rZW5pemVyIHQgPSBuZXcgVG9rZW5pemVyKG5ldyBTdHJpbmdbXSB7ImZlcmhhdCIsICJlbG1hcyIsICJodXNleW4iLCAiZ2FzaW1vdiIsICJ0aGF0IiwgImlzIiwgImEiLCAic2FtcGxlIn0pOwogICAgTGlzdDxTdHJpbmc+IHdvcmRzID0gdC5nZXRXb3JkcygidXNueWVodHRhaHNpYWFzcG1sZSIpOwogICAgaWYod29yZHMgIT0gbnVsbCkgLy8gdW5tYXRjaGVkIHJldHVybnMgbnVsbCBzaW5jZSBlbXB0eSBzdHJpbmcgcmV0dXJucyBlbXB0eSBsaXN0CiAgICAgIGZvcihTdHJpbmcgdyA6IHdvcmRzKQogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih3KTsKICB9Cn0=