纯C语言|简便方法|解题报告(第18例) ASCII码
Posted 顾冷__
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了纯C语言|简便方法|解题报告(第18例) ASCII码相关的知识,希望对你有一定的参考价值。
三道题的共同部分就是 使用一个hash[256](数组),去标记字符出现的次数,然后去完成题目的要求
现在来开始吧~
第一题判断唯一字符
int book[110];
bool isUnique(char* astr)
memset(book,0,sizeof(book));//初始化内存
int flg=0;
if(strlen(astr)<=1)//单个字符或者空串,直接正确
return true;
for(int i=0;astr[i];i++)//book标记字符出现的次数
book[astr[i]-'a']++;
if(book[astr[i]-'a']==2)//当出现重复时,标记重复
flg=1;
if(flg)//如果标记有重复 就返回false
return false;
return true;
第二题第一次出现一次的字符
主要问题是
怎么解决第一次出现的字符,既可以使用hash映射,
也有一个简单的方法就是,
1.按照输入的顺序遍历,每个字母标记出现的次序
2.还是按照顺序遍历,找到第一个出现次序为1的字符就是所求字符(自己思考一下,很巧妙)
这样就避免了使用hash映射的方法,
int hash[256];
char firstUniqChar(char* s)
int i, len = strlen(s);
memset(hash, 0, sizeof(hash));
for (i = 0; i < len; i++)
hash[s[i]]++;
for (i = 0; i < len; i++)
if (hash[s[i]] == 1)
return s[i];
return ' ';
第三题赎金信
很简单的思路,设置一个数组去记录每个字符出现的次数, 如果出现杂志中出现+1,用一个-1,直接遍历即可,不需要考虑顺序什么别的问题
核心还是用一个数组去储存ascll值 去标记字符出现次序
空间复杂度为O(N);
int hash[256]=0;//标记数组
bool canConstruct(char * ransomNote, char * magazine)
memset(hash,0,sizeof(hash));//初始化内存
int len1 = strlen(magazine);//分别求长度
int len2 = strlen(ransomNote);//并且len2>=len1
for(int i=0;i<len1;i++)
hash[magazine[i]]++;//杂志中出现的+1
for(int i=0;i<len2;i++)
hash[ransomNote[i]]--;//需要一个就对该字符-1
for(int i=65;i<123;i++)
if(hash[i]<0)//只要有一个,就不可以
return false;
return true;
以上是关于纯C语言|简便方法|解题报告(第18例) ASCII码的主要内容,如果未能解决你的问题,请参考以下文章