Find the First Nonrepeated Character
Write an efficient function to find the first nonrepeated character in a string. For instance, the first nonrepeated character in “total” is ‘o’ and the first nonrepeated character in “teeter” is ‘r’. Discuss the efficiency of your algorithm.
Solution
1. we can determine whether a particular character is repeated by comparing with all other characters in the string. When we find a character that has no match elsewhere in the string except for itself, we found the first nonrepeated character. However, this algorithm gives a worst case of O(n2) time complexity.
class Solution {
public static char findFirstUnrepeated(String s) {
if (s == null || s.length() == 0)
return '\0';
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
int j = 0;
for (j = 0; j < s.length(); j++) {
if (ch == s.charAt(j) && i != j)
break;
else
continue;
}
if (j == s.length())
return ch;
}
return '\0';
}
public static void main(String[] args) {
String s = "abcabcfffui";
System.out.print(findFirstUnrepeated(s));
}
}
2. Use a hashset to store the characters. If the characters appear more than once, remove it from the hashset, else, put them into the hashset. The answer will be the first element of the final hashset. The time complexity will be O(n).
class Solution {
public static char findFirstUnrepeated(String s) {
if (s == null || s.length() == 0)
return '\0';
HashSet<Character> set = new HashSet<Character>();
for (int i = 0; i < s.length(); i++) {
if (set.contains(s.charAt(i)))
set.remove(s.charAt(i));
else
set.add(s.charAt(i));
}
if (set.size() == 0)
return '\0';
else
return set.iterator().next();
}
public static void main(String[] args) {
String s = "abcabcfffui";
System.out.print(findFirstUnrepeated(s));
}
}