《剑指offer》第五十题(字符串中第一个只出现一次的字符)
// 面试题50(一):字符串中第一个只出现一次的字符
// 题目:在字符串中找出第一个只出现一次的字符。如输入"abaccdeff",则输出
// 'b'。 #include <iostream>
#include <string>
//使用一个长度为常量的哈希表,两次遍历,时间复杂度O(n),空间复杂度O(1)
char FirstNotRepeatingChar(const char* pString)
{
if (pString == nullptr)
return '\0'; const int tableSize = ;
unsigned int hashTable[tableSize];//建立一个简单的哈希表,键值为ASCII码的int值,值为其个数
for (unsigned int i = ; i < tableSize; ++i)
hashTable[i] = ; const char* pHashKey = pString;
while (*(pHashKey) != '\0')//第一次遍历,统计pString字符串中每个字符的个数
hashTable[*(pHashKey++)] ++; pHashKey = pString;
while (*pHashKey != '\0')//第二次遍历,检查哈希表中第一个值为1的键值
{
if (hashTable[*pHashKey] == )
return *pHashKey; pHashKey++;
} return '\0';
} // ====================测试代码====================
void Test(const char* pString, char expected)
{
if (FirstNotRepeatingChar(pString) == expected)
printf("Test passed.\n");
else
printf("Test failed.\n");
} int main()
{
// 常规输入测试,存在只出现一次的字符
Test("google", 'l'); // 常规输入测试,不存在只出现一次的字符
Test("aabccdbd", '\0'); // 常规输入测试,所有字符都只出现一次
Test("abcdefg", 'a'); // 鲁棒性测试,输入nullptr
Test(nullptr, '\0');
system("pause");
return ;
}





《剑指offer》第五十题(字符串中第一个只出现一次的字符)的更多相关文章
- 剑指Offer(三十四):第一个只出现一次的字符
剑指Offer(三十四):第一个只出现一次的字符 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net ...
- 剑指Offer 找出字符串中第一个只出现一次的字符
题目描述 找出字符串中第一个只出现一次的字符 如果无此字符 请输出'.' 输入描述: 输入一串字符,由小写字母组成 输出描述: 输出一个字符 输入例子: asdfasdfo 输出例子: o 思路:数组 ...
- C++版 - 剑指Offer 面试题35:第一个只出现一次的字符 解题报告(华为OJ034-找出字符串中第一个只出现一次的字符)
面试题35:第一个只出现一次的字符 题目:在一个字符串中找到第一个只出现一次的字符.如输入abaccdeff,则输出b.(2006年google的一道笔试题.) 分析: 首先应向确认一下是ASCII字 ...
- 【Java】 剑指offer(50-1) 字符串中第一个只出现一次的字符
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 在字符串中找出第一个只出现一次的字符.如输入"abacc ...
- 《剑指offer》第二十题(表示数值的字符串)
// 面试题20:表示数值的字符串 // 题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如, // 字符串“+100”.“5e2”.“-123”.“3.1416”及“-1E-16 ...
- 《剑指offer》第十题(斐波那契数列)
// 面试题:斐波那契数列 // 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项. #include <iostream> using namespace std; ...
- JS 剑指Offer(三) 替换字符串中的空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20". 实现这个函数的方法很简单,在JS中可以直接应用正则表达式,代码如下 直接将全局中的space换成%20,一行代码搞定 ...
- 你要的最后一个字符就在下面这个字符串里,这个字符是下面整个字符串中第一个只出现一次的字符。(比如,串是abaccdeff,那么正确字符就是b了)
include "stdafx.h" #include<iostream> #include<string> using namespace std; in ...
- 剑指offer第五章
剑指offer第五章 1.数组中出现次数超过一半的数 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组 ...
随机推荐
- sqlalchemy学习笔记
https://segmentfault.com/a/1190000006949536
- Prometheus监控学习笔记之prometheus的federation机制
0x00 概述 有时候对于一个公司,k8s集群或是所谓的caas只是整个技术体系的一部分,往往这个时候监控系统不仅仅要k8s集群以及k8s中部署的应用,而且要监控传统部署的项目.也就是说整个监控系统不 ...
- Python3 hasattr()、getattr()、setattr()函数简介
Python3 hasattr().getattr().setattr()函数简介 一.hasattr(object, name) 判断object对象中是否存在name属性,当然对于python的对 ...
- Python3 Pandas的DataFrame格式数据写入excle文件、json、html、剪贴板、数据库
Python3 Pandas的DataFrame格式数据写入excle文件.json.html.剪贴板.数据库 一.DataFrame格式数据 Pandas是Python下一个开源数据分析的库,它提供 ...
- AngularJs 开发遇到的问题,以及解决方案
1>ng-if 导致 ng-model 失效的问题 比如说下拉联动隐藏显示的时候,多个验证模块,需要使用到ng-if.可以使用 $parent 来解决这个问题 ng-model="$p ...
- runtime.Gosched()的作用分析
untime.Gosched()用于让出CPU时间片.这就像跑接力赛,A跑了一会碰到代码runtime.Gosched()就把接力棒交给B了,A歇着了,B继续跑 测试代码: package main ...
- 05: 使用axios/vue-resource发送HTTP请求
1.1 axios 简介与安装 1.axios简介 1. vue本身不支持发送AJAX请求,需要使用vue-resource.axios等插件实现 2. axios是一个基于Promise的HTTP请 ...
- 监控mysql状态脚本
监控mysql状态, 发现宕后, 自动重启, 每秒检查一次. check.sh #!/bin/bash while [ true ]; do /bin/sleep 1 sh mysql_status. ...
- DOM元素加载之前执行的jQuery代码
<script type="text/javascript"> (function() { alert("DOM还没加载哦!"); })(jQuer ...
- Python3 tkinter基础 Canvas delete 删除画布中的所有图形
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...