在字符串中找出第一个只出现一次的字符
如输入一个字符串char* s =“abcdacfgb”,最终输出‘d’。
方法一:
可以创建两个指针i,j,定义计数变量int count = 0;
起点均为s[0],j先行,
注意自己需要和自己比较 :i=j=0时, count++;
当s[i]与s[j]相同时,count++;
此时count>1,将count重新置为0,i++, j重新从s[0]出发,
如果j遍历一遍后,此时count仍为1,则说明此时的s[i]只出现了一次,
又因为要求为第一个只出现一次的字符,所以直接返回此时的s[i]。
时间复杂度为O(N*N)
代码如下:
char FirstOnceChar(char* s)
{assert(s != NULL); //断言字符串不能为空int i = 0;int count = 0;while(s[i] != '\0') //到字符串末尾{for(int j = 0; j<strlen(s); j++) {if(s[i] == s[j]) count ++;}if(count >1){i++;count = 0;}if(count == 1)return s[i];}
}
int main()
{char* s = "abcdacfgb"; //cout<<FirstOnceChar(s)<<endl;system("pause");
}
方法二:
借用哈希表
将哈希表的Key定义为char记录每个字符,将Value定义为 int记录该字符出现的次数。
遍历第一次就可以每个字符的次数,时间复杂度为O(N),遍历第二次时就可以得到第一次只出现一次的字符,时间复杂度为O(1),所以总的时间复杂度为O(N)。
字符是有256种可能,所以创建一个大小为256,以ASCII码为Key的哈希表。
详细代码如下:
char FirstOnceChar(char* s)
{ assert(s != NULL);const int tablesize = 256;int hashtable[256];for(int i = 0; i < tablesize; i++){hashtable[i] = 0; //将哈希表初始化}char* hashKey = s;while( *hashKey != '\0'){hashtable[*(hashKey++)]++;}hashKey = s;while( *hashKey != '\0'){if(hashtable[*hashKey] == 1){return *hashKey;}hashKey++;}return '\0';
}
在字符串中找出第一个只出现一次的字符相关推荐
- 在字符串中找出第一个只出现一次的字符,Python实现
要求: 1. 不能依赖库函数直接实现此功能,需使用基础的数据结构实现 2. 时间复杂度 O(n) 思路: 1. 用字典存储每个字符在字符串中出现的次数 2. 列表是有序的,用来存储字符的出现先后 3. ...
- 面试题之在字符串中查找出第一个只出现一次的字符的位置
样例:比如"abcdabc",第一个只出现一次的字符为d,位置为3 解决方案1:O(n*n)的复杂度 遍历字符串中的每个字符,然后用该字符在字符串中进行查找,如果没有找到和当前字符 ...
- 找出第一个只出现一次的字符
在一个字符串中找到第一个只出现一次的字符.如输入abaccdeff,则输出b 题目很简单 用一个int 数组,全部初始化为-1. 遍历字符串,如果值为-1,就将值改为字符串的下标,否则设为-2 然后再 ...
- 输入一个字符串,用子函数完成在字符串中找出ACSII码值最大的字符,将其放在第一个位置,并将该字符前的所有字符向后顺序移动
<程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p143 7.1.2 上级实训内容 [实训内容9]输入一个字符串,用子函数完成在字符串中找出ACSII码 ...
- 找出连续最长数字串python_字符串中找出连续最长的数字字符串的实例代码
//1. 写一个函数,它的原形是int continumax(char *outputstr,char *intputstr) //功能: //在字符串中找出连续最长的数字串,并把这个串的长度返回, ...
- 在字符串中找出连续最长的数字串
微软面试题之一,难度系数低. 题目描述如下: 写一个函数,它的原形是int continumax(char *outputstr,char *intputstr) 功能: 在字符串中找出连续最长的 ...
- 盘点一个使用Python实现Excel中找出第一个及最后一个不为零的数,它们各自在第几列
一.前言 前几天在Python交流群中遇到一个问了一个使用Python实现Excel中找出第一个及最后一个不为零的数,它们各自在第几列的问题,觉得还挺有用的,这里拿出来跟大家一起分享下. 数据截图如下 ...
- 在一个字符串中找出最长回文子串
如何高效的在一个字符串中找到最长的回文子串呢?下面我们根据代码来分析 首先,回文串有两种,一种是字符串的长度是偶数,另一种就是奇数.我们从字符串第二个字符开始,我们把当前起始字符叫做i. ...
- 《好未来编程题》字符串中找出连续最长的数字串
题目:读入一个字符串str,输出字符串str中的连续最长的数字串 输入描述: 个测试输入包含1个测试用例,一个字符串str,长度不超过255. 输出描述: 在一行内输出str中里连续最长的数字串. 示 ...
最新文章
- 对下载的包进行修改--python
- 表的垂直拆分和水平拆分
- python的进程模块
- upload-labs_less3_less4_等价扩展名绕过_.htaccess文件改变文件扩展名
- 【活动(北京)】Global Azure Bootcamp
- 大数据之MapReduce详解(MR的运行机制及配合WordCount实例来说明运行机制)
- mysql 表 区 块 页_数据库 | 001-MySQL梳理系列(一)
- Android逆向基础笔记—Android中的常用ARM汇编指令
- 设计模式-第七篇之门面模式
- win10系统托盘图标不见了_win10托盘图标不显示怎么回事_win10任务栏托盘图标显示不完全如何修复...
- android悬浮窗服务卡死,Android 悬浮窗兼容问题谈
- Latex——在线快速生成表格代码
- 如何将两个PDF合并成一个?PDF合并方法
- Python项目如何打包成whl文件
- 基于三维激光雷达的二维占据栅格地图构建-简介
- 套件端口 群晖_群晖NAS的各种端口
- win7共享xp打印机_解决共享打印机不能使用的问题
- 国外著名java论坛
- 云集网上各种解决win10锁屏壁纸不能播放幻灯片的方法
- 「C++小游戏教程」基本技巧(1)——随机化
热门文章
- Horizon View 7 发布Win10桌面二:即时克隆桌面池配置
- Java基础学习总结(142)——以正确的姿势使用Java 8 Optional
- 比特币技术公司创始人:ICO是一场被骗子玩弄的网络泡沫
- SQLServer 可更新订阅数据冲突的一个原因
- node js、npm、homebrew、cocoapod、git、hexo
- 使用Java制作验证码
- 使用UrlRewriter进行Url重写的完整解决方案[转]
- 《Java数据结构和算法》Seven 高级排序 快速排序
- windows 安装mysql的时候最后执行一直停留在Write configuration file
- CITRIX:为什么说“桌面虚拟化”我们最强?