// 面试题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 ;
}

最新文章

  1. VFS
  2. MVC4怎么设置@Html.TextBox这样的输入框的css样式
  3. Educational Codeforces Round 15 A dp
  4. Appnium+python实现手势密码为什么总是报错
  5. uva 10718 Bit Mask (位运算)
  6. C++赋值运算符、函数调用运算符、下标运算符(“=”、“()”、“[]”)重载
  7. Servlet与JSP的异同
  8. Linux的环境变量设置和查看
  9. 全新的.NET解释器 - Mono已经到来
  10. 菜鸟玩云计算之十四:克隆虚拟机及ssh登录的问题
  11. 如何在VB.net中建立word文档
  12. Mysql JSON字段提取某一个属性值的函数
  13. postgrepsql 创建函数
  14. 2.15 C++常量指针this
  15. TOMCAT内存溢出及大小调整的实现方法
  16. c# 四舍五入、上取整、下取整
  17. eclipse新建maven工程的各种坑
  18. Spark Shell Examples
  19. linux命令之awk
  20. DataTable / DataSet 与 xml 的相互转换

热门文章

  1. AngularJS之登录显示用户名
  2. 在win10下安装eclipse
  3. 如何通过 Vue+Webpack 来做通用的前端组件化架构设计
  4. Tomcat 7服务器线程模型
  5. eclipse中的ctrl+H使用中的问题
  6. 写了个脚本将json换成md
  7. LOIC
  8. linux任务计划及周期性任务计划
  9. hdfoo站点开发笔记
  10. SpringBoot 使用Mybatis-Plus