本文参考自《剑指offer》一书,代码采用Java语言。

更多:《剑指Offer》Java实现合集  

题目 

  在字符串中找出第一个只出现一次的字符。如输入"abaccdeff",则输出'b'。

思路

  创建哈希表,键值key为字符,值value为出现次数。第一遍扫描:对每个扫描到的字符的次数加一;第二遍扫描:对每个扫描到的字符通过哈希表查询次数,第一个次数为1的字符即为符合要求的输出。

  由于字符(char)是长度为8的数据类型,共有256中可能,因此哈希表可以用一个长度为256的数组来代替,数组的下标相当于键值key,对应字符的ASCII码值;数组的值相当于哈希表的值value,用于存放对应字符出现的次数。

测试算例 

  1.功能测试(存在/不存在只出现一次的字符;全部都为只出现一次的字符)

  2.特殊测试(null)

Java代码

//题目:在字符串中找出第一个只出现一次的字符。如输入"abaccdeff",则输出
//'b'。 public class FirstNotRepeatingChar {
public char firstNotRepeatingChar(String str) {
if(str==null)
return '\0';
int[] repetitions = new int[256];
for(int i=0;i<256;i++)
repetitions[i]=0;
for(int i=0;i<str.length();i++) {
int loc=(int) str.charAt(i);
repetitions[loc]+=1;
}
for(int i=0;i<str.length();i++) {
int loc=(int) str.charAt(i);
if(repetitions[loc]==1)
return (char)loc;
}
return '\0';
} public static void main(String[] args) {
FirstNotRepeatingChar demo =new FirstNotRepeatingChar();
System.out.println((demo.firstNotRepeatingChar("google")=='l'));
System.out.println((demo.firstNotRepeatingChar("aabccdbd")=='\0'));
System.out.println((demo.firstNotRepeatingChar("$abcdefg")=='$'));
System.out.println((demo.firstNotRepeatingChar(null)=='\0'));
}
}

  

  

收获

  1.如果需要创建哈希表,键值为 字符,值为 数字时,可以考虑用数组(length=256)来替代,数组下标表示为字符的ASCII码值。

  2.哈希表的时间复杂度为O(1),要求有较高的查找速度时,可以考虑使用哈希表(Java中可以使用HashMap)

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

更多:《剑指Offer》Java实现合集  

  

【Java】 剑指offer(50-1) 字符串中第一个只出现一次的字符的更多相关文章

  1. 剑指Offer 找出字符串中第一个只出现一次的字符

    题目描述 找出字符串中第一个只出现一次的字符 如果无此字符 请输出'.' 输入描述: 输入一串字符,由小写字母组成 输出描述: 输出一个字符 输入例子: asdfasdfo 输出例子: o 思路:数组 ...

  2. 《剑指offer》-找到字符串中第一个只出现一个的字符

    题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...

  3. C++版 - 剑指Offer 面试题35:第一个只出现一次的字符 解题报告(华为OJ034-找出字符串中第一个只出现一次的字符)

    面试题35:第一个只出现一次的字符 题目:在一个字符串中找到第一个只出现一次的字符.如输入abaccdeff,则输出b.(2006年google的一道笔试题.) 分析: 首先应向确认一下是ASCII字 ...

  4. 剑指offer三十四之第一个只出现一次的字符

    一.题目 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置 二.思路 详见代码注释. 三.代码 import java.util. ...

  5. 剑指Offer面试题:30.第一个只出现一次的字符

    一.题目:第一个只出现一次的字符 题目:在字符串中找出第一个只出现一次的字符.如输入"abaccdeff",则输出'b'.要求时间复杂度为O(n). 最直观的想法是从头开始扫描这个 ...

  6. 牛客网剑指offer第34题——找到第一个只出现一次的字符

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

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

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

  8. 【剑指offer】替换字符串中的空格

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/25002199 剑指offer上的第四道题目,在九度OJ上測试通过,但还是有些问题.由于是用 ...

  9. 剑指offer 04_替换字符串中的空格

    #include <stdio.h> void ReplaceBlank(char string[],int length){ if(string == NULL || length == ...

随机推荐

  1. APR欺骗

    ARP欺骗简介 ARP欺骗是一种在局域网中常用的攻击手段,目的是让局域网中指定的(或全部)的目标机器的数据包都通过攻击者主机进行转发,是实现中间人攻击的常用手段,从而实现数据监听.篡改.重放.钓鱼等攻 ...

  2. luogu 1064 金明的预算方案

    01背包 变形,有主附件的背包内则更改决策 original: 1) 不选   2)选,f[j-w[i]]+v[i] now :     1)不选   2)选主   3)主 附1  4)主 附2   ...

  3. C# Regex正则常用方法的使用

    using System; using System.Collections; using System.Configuration; using System.Data; using System. ...

  4. dbeaver can't connect HBase1.2 using phoenix driver #1863

    1 第一个问题 Unexpected version format: 10.0.2 Unexpected version format: 10.0.2 Unexpected version forma ...

  5. PWA,SPA,MPA

    PWA渐进式应用 特点: 不会部署到应用商店. 离线应用,通过设备进行存储规划 在发布了pwa的网站,浏览器会询问是否安装app到主屏. 方便分享,通过url. 可推送通知 . 通过service w ...

  6. Modelsim SE 破解教程

    第一步:打开我们提供的破解工具包. 第二步:拷贝crack.bat和MentorKG.exe到"C:\modeltech64_10.2c\win64"路径下,如果你的电脑为32位, ...

  7. WEBSHELL恶意代码批量提取清除工具

    场景 使用D盾扫描到WEBSHELL后可以导出有路径的文本文件. 最后手动去把WEBSHELL复制到桌面然后以文件路径命名,挨个删除. D盾界面是这样的. 手动一个个找WEBSHELL并且改名效率太低 ...

  8. UML和模式应用5:细化阶段(9)---迈向对象设计

    1.前言 开发者如何设计对象,可以采用如下三种方式: 编码:在编码的同时进行设计 绘图然后编码:绘制一些UML,然后转到如上编码方式,在集成开发环境中编码 只绘图,不编码:使用工具从图中生成一切 本章 ...

  9. nodejs 使用http模块保存源码

    var xpath=require("xpath"); var fs=require("fs"); var dom = require('xmldom').DO ...

  10. ES系列十六、集群配置和维护管理

    一.修改配置文件 1.节点配置 1.vim elasticsearch.yml # ======================== Elasticsearch Configuration ===== ...