题解 | #字符流中第一个不重复的字符#
字符流中第一个不重复的字符
http://www.nowcoder.com/practice/00de97733b8e4f97a3fb5c680ee10720
使用LinkedHashMap,可以保持输出的顺序和加入的顺序是一致的,然后使用map.getOrDefault(ch, 0)方法判断是否有值,没有的话加一,有的话在原来的数字基础上加一,最终在map里面可以得到每个字符的个数,然后遍历输出,当个数为一的时候,就输出字符,不再遍历,负责会覆盖之前的字符,一趟遍历之后,发现没有个数为一的字符,此时返回#号。
public class Solution {
Map<Character, Integer> map = new LinkedHashMap<>();
public void Insert(char ch) {
map.put(ch, map.getOrDefault(ch, 0) + 1);
}
public char FirstAppearingOnce() {
char result = '#';
for (Character c : map.keySet()) {
if (map.get(c) == 1) {
result = c;
break;
}
}
return result;
}
public static void main(String[] args) {
Solution solution = new Solution();
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
StringBuilder caseout = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
solution.Insert(str.charAt(i));
caseout.append(solution.FirstAppearingOnce());
}
System.out.println(caseout);
}
}