牛客網華爲機試【找出字符串中第一個只出現一次的字符】

題目描述

找出字符串中第一個只出現一次的字符

輸入描述:
輸入一個非空字符串

輸出描述:
輸出第一個只出現一次的字符,如果不存在輸出-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);
            }
        }
    }
}

結果

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章