題目描述
找出字符串中第一個只出現一次的字符
輸入描述:
輸入一個非空字符串
輸出描述:
輸出第一個只出現一次的字符,如果不存在輸出-1
示例
輸入
asdfasdfo
輸出
o
題目分析
這道題,想了老半天,覺得和單詞統計沒差啊。
首先將所有的字符存儲進一個 LinkedHashMap,其中 key 是該字符,value是該字符出現的次數。
之後,便是遍歷,想着使用java8的 forEach遍歷,不明白的報錯了。
最後,只能退而求其次,使用的古老的遍歷方式。
其中,會判斷 value 是不是1,是1的話直接打印對應字符,結束循環。
如果遍歷了所有的數據,都沒有1,那麼就打印個 -1。
當然,這一步可以改成很多種寫法。我就用這個古老的方式好了。
java 代碼
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;
/**
* 找出字符串中第一個只出現1次的字符
*/
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while(input.hasNext()){
String line = input.next();
int len = line.length();
Map<Character, Integer> map = new LinkedHashMap<>();
for (int i = 0; i < len; i++) {
map.put(line.charAt(i), map.getOrDefault(line.charAt(i), 0) + 1);
}
// 遍歷
Iterator<Map.Entry<Character, Integer>> iterator = map.entrySet().iterator();
int flag = -1;
while(iterator.hasNext()){
Map.Entry<Character, Integer> next = iterator.next();
int count = next.getValue();
if(count == 1){
System.out.println(next.getKey());
flag = 1;
break;
}
}
if(flag == -1){
System.out.println(-1);
}
}
}
}