题目描述

在一个字符串(1<=字符串长度<=10000,全部由大小写字母组成)中找到第一个只出现一次的字符,并返回它的位置。

时间复杂度O(n):遍历一次字符串,将字符与其出现的次数记录在HashMap中;再遍历一次字符串,第一次检测到其在HashMap中记录的次数为1时,输出当前位置。

代码:

import java.util.*;
public class Solution {public int FirstNotRepeatingChar(String str) {if(str==null||str.length()==0){return -1;}char[] chars = str.toCharArray();HashMap<Character,Integer> map = new HashMap<Character,Integer>();for(int i=0;i<str.length();i++){if(map.get(chars[i])!=null){map.put(chars[i],map.get(chars[i])+1);}else{map.put(chars[i],1);}}for(int i=0;i<str.length();i++){if(map.get(chars[i])==1){return i;}}return -1;}
}

这种题目的变形:

剑指offer_数组中出现次数超过一半的数字

都是利用HashMap记录出现的字符及其次数。

再次变形:

实现一函数,给定两个字符串str1和str2,将字符串str2中在str1出现的字符删除掉。例如,str1=“We are strudent”,str2=“eas”,最终返回“W r tudnt”。

做法:遍历str2并将其字符放入哈希数组中,再遍历str1,去掉哈希数组中存在的字符即可。与上题思路一致。时间复杂度为O(n+m),n和m分别为str1和str2的长度。空间为O(1)。

再变再变:

实现一函数,将字符串中出现重复字符全部去掉。例如,str=“google”,那么返回为“gole”。

做法:类似,可用一个布尔数组去记录。第一次出现标志位true,当第二次访问该字符时,当前标志位为true时,删除当前字符。时间复杂度为O(n),n为str的长度。空间为O(1)。

思路都是一样一样的

转载于:https://www.cnblogs.com/lingongheng/p/6444222.html

剑指offer_第一个只出现一次的字符相关推荐

  1. 《剑指offer》第一次只出现一次的字符

    题目:在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置 解析:题目意思是找整个字符串第一次只出现一次的字符的位置,以google为 ...

  2. 剑指offer_两个链表的第一个公共结点

    题目描述 输入两个链表,找出它们的第一个公共结点. 解题思路: 遇到这种题目,瞬间想到HashMap- 用一个HashMap依次记录第一个链表的结点: 遍历第二个链表结点,一旦在HashMap中找到, ...

  3. 【LeetCode】剑指 Offer 50. 第一个只出现一次的字符

    [LeetCode]剑指 Offer 50. 第一个只出现一次的字符 文章目录 [LeetCode]剑指 Offer 50. 第一个只出现一次的字符 一.哈希表 二.有序哈希表 本题考查哈希表的使用, ...

  4. 剑指offer——面试题35:第一个只出现一次的字符

    剑指offer--面试题35:第一个只出现一次的字符 Solution1: 垃圾算法不看也罢!自己想到的垃圾算法 class Solution { public:int FirstNotRepeati ...

  5. 【Java】 剑指offer(50-2) 字符流中第一个只出现一次的字符

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字 ...

  6. 剑指Offer(java版):第一个只出现一次的字符

    2019独角兽企业重金招聘Python工程师标准>>> 题目:在字符串中找出第一个只出现一次的字符.如输入"abaccdeff",则输出'b'. 看到这样的题目, ...

  7. 剑指offer:第一个只出现一次的字符

    题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). 解题思路 class So ...

  8. 【剑指offer-Java版】35第一个只出现一次的字符

    第一个只出现一次的字符: 对于给定的字符,遍历一遍,然后将其映射到一个hash表中,遍历完成之后,遍历哈希表, 遇到的第一个哈希值为1所对应的字符就是第一个只出现了一次的字符 public class ...

  9. 《剑指offer》第五十题(字符串中第一个只出现一次的字符)

    // 面试题50(一):字符串中第一个只出现一次的字符 // 题目:在字符串中找出第一个只出现一次的字符.如输入"abaccdeff",则输出 // 'b'. #include & ...

最新文章

  1. linux中的ln属性,linux 常用基础命令 ln 详细介绍
  2. 深度学习-语义分割总结
  3. Linux计划任务详解
  4. 基于HTML在线考试系统开题报告,基于JSP的在线考试系统 开题报告.doc
  5. 写个mp3播放器 - flash.media.sound
  6. 数组索引必须为正整数或逻辑值_Office 365函数新世界——动态数组
  7. Vivado过程文件解释
  8. RESTful API 设计思考
  9. 网上Silverlight项目收集
  10. map() 与 nest.map_structure() 的区别及用法
  11. Python基本数据类型之set
  12. APUE---chap6系统数据文件和信息---6.2~6.4 6.10
  13. python提取pdf中的文字和图片_python 三种方法提取pdf中的图片
  14. 鸡呼吸疾病常见的症状 防治鸡打喷嚏的特效药
  15. 什么是Python?Python简介
  16. Java技术学习网,是我们日常学习不可欠缺的
  17. 安装python的pip相关
  18. 动态链接函数dlsym()的参数RTLD_NEXT使用注意事项
  19. 2023年系统集成项目管理工程师报考条件及时间安排
  20. 计算机学院新年祝福语,春节祝福语-湖北工业大学工程技术学院校报电子版《成长》...

热门文章

  1. spring Mvc 执行原理 及 xml注解配置说明 (六)
  2. [转贴]JAVA:RESTLET开发实例(三)基于spring的REST服务
  3. 世界杯后linux进化有感?
  4. 毫秒级预测,性能卓越!检测、跟踪、行为识别都搞定!这套行人分析系统重磅开源!...
  5. 北京 | 蚂蚁集团共享智能团队招聘研究实习生
  6. 谷歌 NAS + 目标检测 新作:SpineNet
  7. 当时尚遇上AI!港中文MMLab开源MMFashion工具箱
  8. PRNet:人脸3D重建与密集对齐
  9. 【OpenCV】OpenCV实战从入门到精通之 -- 访问图像中的像素
  10. 【OpenCV】OpenCV函数精讲之 -- 图像容器Mat