如输入一个字符串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';
}

在字符串中找出第一个只出现一次的字符相关推荐

  1. 在字符串中找出第一个只出现一次的字符,Python实现

    要求: 1. 不能依赖库函数直接实现此功能,需使用基础的数据结构实现 2. 时间复杂度 O(n) 思路: 1. 用字典存储每个字符在字符串中出现的次数 2. 列表是有序的,用来存储字符的出现先后 3. ...

  2. 面试题之在字符串中查找出第一个只出现一次的字符的位置

    样例:比如"abcdabc",第一个只出现一次的字符为d,位置为3 解决方案1:O(n*n)的复杂度 遍历字符串中的每个字符,然后用该字符在字符串中进行查找,如果没有找到和当前字符 ...

  3. 找出第一个只出现一次的字符

    在一个字符串中找到第一个只出现一次的字符.如输入abaccdeff,则输出b 题目很简单 用一个int 数组,全部初始化为-1. 遍历字符串,如果值为-1,就将值改为字符串的下标,否则设为-2 然后再 ...

  4. 输入一个字符串,用子函数完成在字符串中找出ACSII码值最大的字符,将其放在第一个位置,并将该字符前的所有字符向后顺序移动

    <程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p143 7.1.2 上级实训内容 [实训内容9]输入一个字符串,用子函数完成在字符串中找出ACSII码 ...

  5. 找出连续最长数字串python_字符串中找出连续最长的数字字符串的实例代码

    //1. 写一个函数,它的原形是int continumax(char *outputstr,char *intputstr) //功能: //在字符串中找出连续最长的数字串,并把这个串的长度返回, ...

  6. 在字符串中找出连续最长的数字串

    微软面试题之一,难度系数低. 题目描述如下: 写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)  功能:  在字符串中找出连续最长的 ...

  7. 盘点一个使用Python实现Excel中找出第一个及最后一个不为零的数,它们各自在第几列

    一.前言 前几天在Python交流群中遇到一个问了一个使用Python实现Excel中找出第一个及最后一个不为零的数,它们各自在第几列的问题,觉得还挺有用的,这里拿出来跟大家一起分享下. 数据截图如下 ...

  8. 在一个字符串中找出最长回文子串

    如何高效的在一个字符串中找到最长的回文子串呢?下面我们根据代码来分析 首先,回文串有两种,一种是字符串的长度是偶数,另一种就是奇数.我们从字符串第二个字符开始,我们把当前起始字符叫做i.        ...

  9. 《好未来编程题》字符串中找出连续最长的数字串

    题目:读入一个字符串str,输出字符串str中的连续最长的数字串 输入描述: 个测试输入包含1个测试用例,一个字符串str,长度不超过255. 输出描述: 在一行内输出str中里连续最长的数字串. 示 ...

最新文章

  1. 对下载的包进行修改--python
  2. 表的垂直拆分和水平拆分
  3. python的进程模块
  4. upload-labs_less3_less4_等价扩展名绕过_.htaccess文件改变文件扩展名
  5. 【活动(北京)】Global Azure Bootcamp
  6. 大数据之MapReduce详解(MR的运行机制及配合WordCount实例来说明运行机制)
  7. mysql 表 区 块 页_数据库 | 001-MySQL梳理系列(一)
  8. Android逆向基础笔记—Android中的常用ARM汇编指令
  9. 设计模式-第七篇之门面模式
  10. win10系统托盘图标不见了_win10托盘图标不显示怎么回事_win10任务栏托盘图标显示不完全如何修复...
  11. android悬浮窗服务卡死,Android 悬浮窗兼容问题谈
  12. Latex——在线快速生成表格代码
  13. 如何将两个PDF合并成一个?PDF合并方法
  14. Python项目如何打包成whl文件
  15. 基于三维激光雷达的二维占据栅格地图构建-简介
  16. 套件端口 群晖_群晖NAS的各种端口
  17. win7共享xp打印机_解决共享打印机不能使用的问题
  18. 国外著名java论坛
  19. 云集网上各种解决win10锁屏壁纸不能播放幻灯片的方法
  20. 「C++小游戏教程」基本技巧(1)——随机化

热门文章

  1. Horizon View 7 发布Win10桌面二:即时克隆桌面池配置
  2. Java基础学习总结(142)——以正确的姿势使用Java 8 Optional
  3. 比特币技术公司创始人:ICO是一场被骗子玩弄的网络泡沫
  4. SQLServer 可更新订阅数据冲突的一个原因
  5. node js、npm、homebrew、cocoapod、git、hexo
  6. 使用Java制作验证码
  7. 使用UrlRewriter进行Url重写的完整解决方案[转]
  8. 《Java数据结构和算法》Seven 高级排序 快速排序
  9. windows 安装mysql的时候最后执行一直停留在Write configuration file
  10. CITRIX:为什么说“桌面虚拟化”我们最强?