《剑指Offer》【经典详解】第一个只出现一次的字符。在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1

1.题目描述

在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)

 题目分析:

  1. 判断第一个出现一次的字符,需要对整个字符串进行遍历,将字符串转换为字符的形式,使用的charAt(int index),表示查询的是字符串中字符的位置。
  2. 遍历过程中判断当前字符是否在集合中已经存在,存在的话记录出现的次数,将当前的键值对存入集合。否则的话,把Value设置为1 
  3. 从开始遍历字符串,判断集合中元素出现的次数是否等于1,等于1的话返回位置

2.代码实现

import java.util.*;
public class Solution {

    public int FirstNotRepeatingChar(String str) {
      if(str == null || str.length() == 0){
        return -1;
      }
      // 使用集合HaspMap存储的键是字符,值是在整个字符串中该字符出现的次数
      HashMap<Character,Integer> map = new HashMap<Character,Integer>();
      // 对字符串进行遍历
      for(int i = 0;i < str.length();i++){
        // 如果键中包含
        if(map.containsKey(str.charAt(i))){
          int count  = map.get(str.charAt(i));
          map.put(str.charAt(i),++count);
        }else{
          map.put(str.charAt(i),1);
        }
      }
      // 找到第一个不重复的字符串的位置
      for(int i = 0;i < str.length();i++){
        if(map.get(str.charAt(i)) == 1){
          return i;
        }
      }
        return -1;
    }
}

3.总结

  1. 这个题对对字符串的遍历,对字符串中的元素进行判断使用的集合HashMap键值对的形式
  2. 使用键作为字符串中的字符,值作为字符在字符串中出现的次数
  3. 使用HashMap<Key,Value>的算法,剑指Offer中目前出现了好几次了,给予重视
  4. 坚持下去,相信一定会睡到渠成!
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值