第一次只出现一次的字符
来源:互联网 发布:甘肃启航网络待遇 编辑:程序博客网 时间:2024/06/09 02:25
//在字符串中找出第一个只出现一次的字符。如输"abaccdeff",则输出'b'.#include "string"#include "map"#include "iostream"using namespace std;//法1:用map O(nlogn)char firstNotRepeatedChar0(char* str){if (str == NULL) //一定要有,strlen(str)位置读取冲突return '\0';int len = strlen(str);map<char, int> charCount;for (int i = 0; i < len; i++)charCount[str[i]]++;for (int i = 0; i < len; i++){if (charCount[str[i]] == 1){cout << str[i] << endl;return str[i];}}return '\0';}#include "unordered_map"char firstNotRepeatedChar1(char* str){if (str == NULL) //一定要有,strlen(str)位置读取冲突return '\0';int len = strlen(str);unordered_map<char, int> charCount;for (int i = 0; i < len; i++)charCount[str[i]]++;for (int i = 0; i < len; i++){if (charCount[str[i]] == 1){cout << str[i] << endl;return str[i];}}return '\0';}//自己用哈希表,如果是ascii编码的话256个字符char firstNotRepeatedChar2(char* str){if (str == NULL)return '\0';int len = strlen(str);const int tableSize = 256;unsigned int hashTable[tableSize] = { 0 };for (int i = 0; i < len; i++)hashTable[str[i]]++;for (int i = 0; i < len; i++){if (hashTable[str[i]] == 1){cout << str[i] << endl;return str[i];}}return '\0';}#include "ctime"void test(){char* str = "abaccdeff";clock_t t0 = 0, t00;clock_t t1 = 0, t11;clock_t t2 = 0, t22;for (int i = 0; i < 1000; i++){t00 = clock();firstNotRepeatedChar0(str);t0 += clock() - t00;t11 = clock();firstNotRepeatedChar1(str);t1 += clock() - t11;t22 = clock();firstNotRepeatedChar2(str);t2 += clock() - t22;}cout << t0 << "ms" << endl;cout << t1 << "ms" << endl;cout << t2 << "ms" << endl;}int main(){test();return 0;}运行结果:
201ms
214ms
85ms
自己写的hashTable最快,自带的unordered_map最慢。虽然unordered_map内部机理也是hashtable,但较于直接的hastTbale[size],做了很多超出本题需要的无用功。所以会慢。
0 0
- 第一次只出现一次的字符
- 第一次只出现一次的字符
- 查出第一次只出现一次的字符
- 第一次只出现一次的字符
- 第一次只出现一次的字符
- 第一次只出现一次的字符
- 第一次只出现一次的字符
- 第一次只出现一次的字符
- 查找第一次只出现一次的字符
- 第一次只出现一次的字符
- 第一次只出现一次的字符
- 第一次只出现一次的字符
- 字符串中第一次出现的只出现一次的字符
- 第一次只出现一次的字符/删除指定字符
- 字符串查找:(第一次)&&(只出现一次的字符)
- 统计一个字符串中第一次只出现一次的字符
- 哈希表初识--查找第一次只出现一次的字符
- 剑指offer 35-第一次只出现一次的字符
- js和html的结合方式及js的变量声明和数据类型
- 搭建Apache Server +Tomcat 简单集群环境,实现session复制
- Mysql 数据备份与还原
- 剑指Offer:二叉树的镜像
- hdu2795(线段树,节点更新)
- 第一次只出现一次的字符
- getSerializableExtra用法体会
- Codeforces Round #354 (Div. 2) E - The Last Fight Between Human and AI
- 我和我的小伙伴们
- Mysql 插入、更新与删除数据
- Android 打印输出16进制数据
- 从0到1(上)
- jdbc连接数据库
- safari地址栏无法使用百度搜索