每日一题-Day04-查找字符串中首次且只出现一次的字符
题目描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)
解题思路
这道题涉及哈希表的思想,我们可以创建一个哈希表,将字符串中出现的字母保存为键值,利用for循环遍历字符串,将重复出现的字母的value值+1,此时可以得到每个字母出现的次数,再通过一个for循环查找最先出现的value值为1的键值,即可得到答案
import java.util.HashMap;
import java.util.Scanner;
//查找字符串中首次且只出现一次的字符
public class Test05 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
if (s==null || s.length()==0){
System.out.println("错误"); //判断字符串是否为空
}
HashMap<Character,Integer> map =new HashMap<>(); //创建一个新的哈希表
for(int i = 0; i < s.length();i++){ //遍历字符串,记下每个字符出现的次数
if(!map.keySet().contains(s.charAt(i))){
map.put(s.charAt(i),1);
}else{
map.put(s.charAt(i),map.get(s.charAt(i))+1);
}
}
for(int j =0; j< s.length();j++){ //查看每个字母出现的次数
if(map.get(s.charAt(j))==1){
System.out.println("结果为:"+s.charAt(j));
}
}
sc.close();
}
}
题目来自牛客网
参考答案来自:一颗闪闪发亮的马路星
知识点
HashMap
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
部分语法
创建一个字符和整数类型的哈希表
HashMap<Character,Integer> map =new HashMap<>();
插入键值对
map.set(key,value)
获取value值
map.get(key)
判断该键值是否存在
map.contains()
具体使用方法参考菜鸟教程 HashMap

浙公网安备 33010602011771号