牛客网华为机试【找出字符串中第一个只出现一次的字符】

文章目录

  • 题目描述
  • 题目分析
  • java 代码
  • 结果

题目描述

找出字符串中第一个只出现一次的字符

输入描述:
输入一个非空字符串

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

结果

牛客网华为机试【找出字符串中第一个只出现一次的字符】_第1张图片

你可能感兴趣的:(牛客网华为机试)