class FirstUniqueCharFinder {
final static int ASCII_OFFSET = 97;
final static int ALPHABET_LEN = 26;
static char find
(String word
) { int[] alphabet = new int[ALPHABET_LEN];
char[] charArray = word.toLowerCase().toCharArray();
for (int codePoint: charArray) {
int index = codePoint - ASCII_OFFSET;
alphabet[index]++;
}
char firstUniqueChar = 0;
for (int i = 0; i < word.length(); i++) {
int index = charArray[i] - ASCII_OFFSET;
if (alphabet[index] == 1) {
firstUniqueChar = word.charAt(i);
break;
}
}
return firstUniqueChar;
}
public static void main
(String[] args
) { System.
out.
println(find
("transaction")); System.
out.
println(find
("reverse")); System.
out.
println(find
("xyuxyuA")); }
}
Y2xhc3MgRmlyc3RVbmlxdWVDaGFyRmluZGVyIHsKICBmaW5hbCBzdGF0aWMgaW50IEFTQ0lJX09GRlNFVCA9IDk3OwogIGZpbmFsIHN0YXRpYyBpbnQgQUxQSEFCRVRfTEVOID0gMjY7CgogIHN0YXRpYyBjaGFyIGZpbmQoU3RyaW5nIHdvcmQpIHsKICAgIGludFtdIGFscGhhYmV0ID0gbmV3IGludFtBTFBIQUJFVF9MRU5dOwogICAgY2hhcltdIGNoYXJBcnJheSA9IHdvcmQudG9Mb3dlckNhc2UoKS50b0NoYXJBcnJheSgpOwogICAgCiAgICBmb3IgKGludCBjb2RlUG9pbnQ6IGNoYXJBcnJheSkgewogICAgICBpbnQgaW5kZXggPSBjb2RlUG9pbnQgLSBBU0NJSV9PRkZTRVQ7IAogICAgICBhbHBoYWJldFtpbmRleF0rKzsKICAgIH0KICAgIAogICAgY2hhciBmaXJzdFVuaXF1ZUNoYXIgPSAwOwoJCglmb3IgKGludCBpID0gMDsgaSA8IHdvcmQubGVuZ3RoKCk7IGkrKykgewoJICBpbnQgaW5kZXggPSBjaGFyQXJyYXlbaV0gLSBBU0NJSV9PRkZTRVQ7CgkgIGlmIChhbHBoYWJldFtpbmRleF0gPT0gMSkgewoJICAJZmlyc3RVbmlxdWVDaGFyID0gd29yZC5jaGFyQXQoaSk7CgkgIAlicmVhazsKCSAgfQoJfQoJCiAgICByZXR1cm4gZmlyc3RVbmlxdWVDaGFyOwogIH0KCiAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgU3lzdGVtLm91dC5wcmludGxuKGZpbmQoInRyYW5zYWN0aW9uIikpOwogICAgU3lzdGVtLm91dC5wcmludGxuKGZpbmQoInJldmVyc2UiKSk7CiAgICBTeXN0ZW0ub3V0LnByaW50bG4oZmluZCgieHl1eHl1QSIpKTsKICB9Cn0=