当前位置: 首页 > news >正文

剑指Offer系列(java版,详细解析)50.第一个只出现一次的字符

题目描述

剑指 Offer 50. 第一个只出现一次的字符

难度简单86收藏分享切换为英文接收动态反馈

在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。

示例:

s = "abaccdeff"
返回 "b"

s = "" 
返回 " "

限制:

0 <= s 的长度 <= 50000

测试用例

  • 功能测试(字符串中存在只出现一次的字符;字符串中不存在只出现一次的字符;字符串中所有字符都只出现一次)
  • 特殊输出测试(字符串为空指针)

题目考点

  • 考察应聘者对数组和字符串的编程能力。
  • 考察应聘者对哈希表的理解及运用。
  • 考察应聘者对时间效率和空间效率的分析能力。

解题思路

利用哈希表,它可以是语言自带的API也可以是自己构建的Hash表,我们定义哈希表的键值是字符,而值为该字符出现的次数。

第一次扫描,每扫到一个字符,就在哈希表的对应项中把次数+1;

第二次扫描,每扫描到一个字符,就能从哈希表中得到该字符的出现次数。这样,第一个只出现一次的字符就是符合要求的输出。

参考解题

class Solution {
    public char firstUniqChar(String s) {
        Map<Character, Boolean> dic = new LinkedHashMap<>();
        char[] sc = s.toCharArray();
        for(char c : sc)
            dic.put(c, !dic.containsKey(c));
        for(Map.Entry<Character, Boolean> d : dic.entrySet()){
           if(d.getValue()) return d.getKey();
        }
        return ' ';
    }
}

补充

如果需要判断多个字符是不是在某个字符串里出现过或者统计多个字符在某个字符串出现的次数,那么我们可以考虑基于数组创建一个简单的哈希表,这样可以用很小的空间消耗换来时间效率的提升。

相关文章:

  • 剑指Offer系列(java版,详细解析)51.数组中的逆序对
  • 剑指Offer系列(java版,详细解析)52.两个链表的第一个公共节点
  • 剑指Offer系列(java版,详细解析)53.在排序数组中查找数字
  • 剑指Offer系列(java版,详细解析)54.二叉搜索树的第K大的节点
  • 剑指Offer系列(java版,详细解析)55.二叉树的深度
  • 剑指Offer系列(java版,详细解析)56.数字中数字出现的次数
  • 剑指Offer系列(java版,详细解析)57.和为s的数字
  • 剑指Offer系列(java版,详细解析)58.翻转字符串
  • 剑指Offer系列(java版,详细解析)59.队列的最大值
  • 剑指Offer系列(java版,详细解析)60.n个骰子的点数
  • 剑指Offer系列(java版,详细解析)61.扑克牌中的顺子
  • 剑指Offer系列(java版,详细解析)62.圆圈中最后剩下的数字
  • 剑指Offer系列(java版,详细解析)63.股票的最大利润
  • 剑指Offer系列(java版,详细解析)64.求1+2+...+n
  • 剑指Offer系列(java版,详细解析)65.不用加减乘除做加法
  • 30天自制操作系统-2
  • AngularJS指令开发(1)——参数详解
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JavaScript 基础知识 - 入门篇(一)
  • JWT究竟是什么呢?
  • Laravel 实践之路: 数据库迁移与数据填充
  • Linux gpio口使用方法
  • Python连接Oracle
  • storm drpc实例
  • Theano - 导数
  • vue 配置sass、scss全局变量
  • 不上全站https的网站你们就等着被恶心死吧
  • 扑朔迷离的属性和特性【彻底弄清】
  • 设计模式(12)迭代器模式(讲解+应用)
  • 微信支付JSAPI,实测!终极方案
  • 06-01 点餐小程序前台界面搭建
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 阿里云重庆大学大数据训练营落地分享
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • ###STL(标准模板库)
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (排序详解之 堆排序)
  • (原)本想说脏话,奈何已放下
  • (转载)Linux 多线程条件变量同步
  • (转载)从 Java 代码到 Java 堆
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET 使用 XPath 来读写 XML 文件
  • .net反编译工具
  • .NET开发不可不知、不可不用的辅助类(一)
  • .NET业务框架的构建
  • .net与java建立WebService再互相调用
  • /etc/skel 目录作用
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节