【剑指offer】- 第一个只出现一次的字符位置-34/67

简介: 【剑指offer】- 第一个只出现一次的字符位置-34/67

1. 题目描述

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

2. 题目解析

  1. 给定一个字符串,让你求这个字符串只出现一次的字符,我们一般的想法都是遍历一遍字符串,依次和后面的相比较,如果一样的话,就去掉。这里的时间复杂度为(On*n)
  2. 我们可以通过java中的hashmap去做,遍历一遍字符串,判断这个字符在不在hashmap中,如果不在,则输入map.put(str.charAt(i), 1);如果在,则int x = map.get(str.charAt(i)); map.put(str.charAt(i), ++x);
  3. 因为hashmap是无序的,所以我们最后需要再遍历一遍字符串,如果当前map.get(str.charAt(i)) == 1我们直接返回i,遍历完后,返回-1

3. 题目代码

import java.util.HashMap;
public class Solution {
   public int FirstNotRepeatingChar(String str) {
    HashMap<Character, Integer> map = new HashMap<>();
    for (int i = 0; i < str.length(); i++) {
      if (map.containsKey(str.charAt(i))) {
        int x = map.get(str.charAt(i));
        map.put(str.charAt(i), ++x);
      } 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;
  }
}


相关文章
|
索引
【LeetCode】917. 仅仅反转字母、387. 字符串中的第一个唯一字符
目录 917. 仅仅反转字母 387. 字符串中的第一个唯一字符
51 0
|
7月前
|
存储 索引
LeetCode 387. 字符串中的第一个唯一字符
LeetCode 387. 字符串中的第一个唯一字符
44 0
|
2月前
(剑指Offer)04、二维数组中的查找11、旋转数组的最小数字50、第一个只出现一次的字符(2021.12.02)
(剑指Offer)04、二维数组中的查找11、旋转数组的最小数字50、第一个只出现一次的字符(2021.12.02)
39 1
|
7月前
|
机器学习/深度学习 索引
【力扣】387. 字符串中的第一个唯一字符
【力扣】387. 字符串中的第一个唯一字符
|
7月前
|
Python C++ Java
C/C++每日一练(20230405) 数组元素循环右移、输出字符图形、移除链表元素
C/C++每日一练(20230405) 数组元素循环右移、输出字符图形、移除链表元素
50 0
C/C++每日一练(20230405) 数组元素循环右移、输出字符图形、移除链表元素
|
7月前
|
算法
leetcode:387. 字符串中的第一个唯一字符
leetcode:387. 字符串中的第一个唯一字符
30 0
|
7月前
|
机器人 Java
每日一刷《剑指offer》字符串篇之第一个只出现一次的字符
每日一刷《剑指offer》字符串篇之第一个只出现一次的字符
73 0
每日一刷《剑指offer》字符串篇之第一个只出现一次的字符
剑指offer 51. 字符串中第一个只出现一次的字符
剑指offer 51. 字符串中第一个只出现一次的字符
69 0
|
算法 索引
字符串中的第一个唯一字符&&有效的字母异位词(多思路)
字符串中的第一个唯一字符&&有效的字母异位词(多思路)
127 0
字符串中的第一个唯一字符&&有效的字母异位词(多思路)
|
机器学习/深度学习
剑指offer 50 第一个只出现一次的字符
剑指offer 50 第一个只出现一次的字符
91 0