博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
找出字符串中第一个只出现一次的字符
阅读量:6626 次
发布时间:2019-06-25

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

hot3.png

昨天参加了一次笔试,最后一道题是这样的:找出一个纯字母字符串中第一个只出现一次的字符。

我的思路是这样的,假设该字符串是由纯小写字母组成,则可以定义一个布尔数组,该数组保存每个字符出现次数是否大于 1 的状态。接着遍历字符串,同时利用 ASCII 码对应到布尔数组,判断状态即可。鄙人的 C++ 代码如下:

#include 
#include
using namespace std;char FirstAppearOnce(char* str) { bool moreThanOnce[26] = {false}; for (char* p = str; *p != '\0'; ++p) { assert((*p >= 'a') && (*p <= 'z')); char* q; for (q = p + 1; !moreThanOnce[*p - 'a'] && (*q != '\0'); ++q) { if (*q == *p) { moreThanOnce[*p - 'a'] = true; break; } } if (*q == '\0') { return *p; } } return 0;}int main() { char* str = "thisisateststring"; cout << FirstAppearOnce(str) << endl; system("pause"); return 0;}

如果存在大小 写、符号等情况,则可以为 整个 ASCII 字符创建一个布尔数组(ASCII 有 128 个字符,因此数组可改为  128 个元素 ) 。对上面代码稍稍修改一下,便可以支持所有字符:

#include 
using namespace std;char FirstAppearOnce(char* str) { bool moreThanOnce[128] = {false}; for (char* p = str; *p != '\0'; ++p) { char* q; for (q = p + 1; !moreThanOnce[*p] && (*q != '\0'); ++q) { if (*q == *p) { moreThanOnce[*p] = true; break; } } if (*q == '\0') { return *p; } } return 0;}int main() { char* str = "This is a test string."; cout << FirstAppearOnce(str) << endl; system("pause"); return 0;}

欢迎拍砖。

转载于:https://my.oschina.net/apoptosis/blog/84013

你可能感兴趣的文章
What a C programmer should know about memory
查看>>
MySQL备份账号权限
查看>>
15个重要的Android代码
查看>>
(转)android 牛人必修 ant 编译android工程
查看>>
求最大公约数与最小公倍数
查看>>
C# Winform 跨线程更新UI控件常用方法总结(转)
查看>>
eclipse菜单栏不显示 + the system is running in lou-graphics mode问题
查看>>
【WebService】使用jaxb完成对象和xml的转换
查看>>
如何去除My97 DatePicker控件上右键弹出官网的链接 - 如何debug混淆过的代码
查看>>
多文档
查看>>
输入5个学生的信息(包括学号,姓名,英语成绩,计算机语言成绩和数据库成绩), 统计各学生的总分,然后将学生信息和统计结果存入test.txt文件中...
查看>>
BZOJ2337 [HNOI2011]XOR和路径
查看>>
C# 该行已经属于另一个表 ...
查看>>
android 避免线程的重复创建(HandlerThread、线程池)
查看>>
手游-放开那三国socket协议分析
查看>>
SQL Lazy Spool Eager Spool
查看>>
type的解释
查看>>
Windows Phone 8 开发环境搭建
查看>>
2017:IDC市场规模将持续增长 增速放缓
查看>>
从自动驾驶到学习机器学习:解读2017科技发展的15大趋势
查看>>