博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(剑指Offer)面试题35:第一个只出现一次的字符
阅读量:6010 次
发布时间:2019-06-20

本文共 1173 字,大约阅读时间需要 3 分钟。

题目:

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

思路:

1、暴力遍历

从头开始扫描字符串中的每个字符,当访问某个字符时,取该字符与后面的每个字符相比较,如果没有重复的字符,那么该字符就是第一个只出现一次的字符。

时间复杂度:O(n^2)

2、Hash

通过hash表来记录字符串中每个字符出现的次数,hash表可以通过一个长度为256的数组来实现,因为字符是一个长度为8的数据类型,总共有256种可能。

(注意:char数据类型的表示范围为-128-127,unsigned char数据类型的表示范围为0-255,需明确字符串中的字符属于哪个范围,这里只考虑大于0的)

第一遍扫描字符串,每扫描一个字符就在hash表中相应位置上+1,记录下每个字符出现的次数;

第二遍扫描字符串,每扫描一个字符就从hash表中得到该字符出现的次数,如果为1,则该字符为第一个只出现一次的字符。

代码:

#include 
using namespace std;char firstNotRepeatingChar(char* pString){ if(pString==NULL) return '\0'; const int tableSize=256; unsigned int hashTable[tableSize]; for(int i=0;i

在线测试OJ:

http://www.nowcoder.com/books/coding-interviews/1c82e8cf713b4bbeb2a5b31cf5b0417c?rp=2

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

AC代码:

class Solution {public:    int FirstNotRepeatingChar(string str) {        if(str.size()<=0)            return -1;        const int tableSize=26;        int hashTable[tableSize];        for(int i=0;i

 

class Solution {public:    int FirstNotRepeatingChar(string str) {        if(str.size()<=0)            return -1;        const int tableSize=256;        int hashTable[tableSize];        for(int i=0;i

转载地址:http://lkrmx.baihongyu.com/

你可能感兴趣的文章
MySQLdb的安装
查看>>
读书笔记三
查看>>
数论 - 最小乘法逆元
查看>>
企业架构研究总结(22)——TOGAF架构开发方法(ADM)之信息系统架构阶段
查看>>
接口测试(三)--HTTP协议简介
查看>>
FlasCC例子研究之bitmapdata
查看>>
委托/事件:猫叫鼠跑人醒
查看>>
IE中Ajax数据缓存的问题
查看>>
周志华《机器学习》课后答案——第4章.决策树
查看>>
C# 数据备份与还原学习(1)--可定制的数据库备份和恢复程序
查看>>
Redis 主从同步配置
查看>>
vue.js基础知识总结
查看>>
Hadoop_22_MapReduce map端join实现方式解决数据倾斜(DistributedCache)
查看>>
frameset分帧问题
查看>>
nginx 413故障
查看>>
WEB前端开发中的SEO注意点
查看>>
linux 学习1
查看>>
vue中路由的认识
查看>>
XML和HTML常用转义字符
查看>>
POJ1811 Prime Test(判断随机素数)
查看>>