【剑指offer】- 第一个只出现一次的字符位置-34/67
  MT2ylF86YBZh 2023年11月02日 113 0


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;
	}
}


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  kG7ef0NqClb6   2023年11月13日   31   0   0 java
  u2N3sQ7nC0dn   2023年11月13日   28   0   0 java
  rCd1NYtlhh0U   2023年11月13日   31   0   0 java
  rCd1NYtlhh0U   2023年11月13日   35   0   0 java
  Ydqp9G8hCwM0   2023年11月13日   35   0   0 java
MT2ylF86YBZh