(defn maxchars
([string max] (maxchars string max 0 #{}))
([string max index prevChars]
(if (>= index (count string))
true
(if (contains? prevChars (str (nth string index)))
(maxchars string max (inc index) prevChars)
(if (>= (count prevChars) max)
false
(maxchars string max
(inc index
) (conj prevChars
(str
(nth string index
)))))))))
(-> (maxchars "aaaaaaaa" 3) println)
(-> (maxchars "aaaaaaaa" 1) println)
(-> (maxchars "abcd" 3) println)
(-> (maxchars "aaaaaaaa" 22) println)
KGRlZm4gbWF4Y2hhcnMgCiAgICAgICAgKFtzdHJpbmcgbWF4XSAobWF4Y2hhcnMgc3RyaW5nIG1heCAwICN7fSkpCiAgICAgICAgKFtzdHJpbmcgbWF4IGluZGV4IHByZXZDaGFyc10KICAgICAgICAgICAgICAgIChpZiAoPj0gaW5kZXggKGNvdW50IHN0cmluZykpCiAgICAgICAgICAgICAgICAgICAgICAgIHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChjb250YWlucz8gcHJldkNoYXJzIChzdHIgKG50aCBzdHJpbmcgaW5kZXgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF4Y2hhcnMgc3RyaW5nIG1heCAoaW5jIGluZGV4KSBwcmV2Q2hhcnMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmICg+PSAoY291bnQgcHJldkNoYXJzKSBtYXgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1heGNoYXJzIHN0cmluZyBtYXggKGluYyBpbmRleCkgKGNvbmogcHJldkNoYXJzIChzdHIgKG50aCBzdHJpbmcgaW5kZXgpKSkpKSkpKSkKIAooLT4gKG1heGNoYXJzICJhYWFhYWFhYSIgMykgcHJpbnRsbikKKC0+IChtYXhjaGFycyAiYWFhYWFhYWEiIDEpIHByaW50bG4pCigtPiAobWF4Y2hhcnMgImFiY2QiIDMpIHByaW50bG4pCigtPiAobWF4Y2hhcnMgImFhYWFhYWFhIiAyMikgcHJpbnRsbik=