程序员面试金典: 9.1数组与字符串 1判断字符串所有字符全都不同
来源:互联网 发布:软件 授权 苹果 编辑:程序博客网 时间:2024/04/29 16:54
#include <iostream>#include <stdio.h>#include <string>using namespace std;const int MAXSIZE = 256;/*问题:实现算法,确定字符串所有字符是否全都不同思路:假设为ASCII字符,那么最多256个,如果字符串长度大于256,必定重复,如果<=256个字符,那么设定一个布尔数组,初始化该数组每个元素为否,表明没有重复出现,如果某字符首次出现,则设定为true,如果某字符对应已经为true,则直接返回输入:chaoyanzhuwenpi输出:repeateddifferent关键:1 大于256个字符,必定重复2 设定一个布尔数组,初始化该数组每个元素为否,表明没有重复出现,如果某字符首次出现,则设定为true,如果某字符对应已经为true,说明重复3 考虑如果字母仅为'a'到'z',则一个int包含32位,则可以采用“&”的方式做,减去‘a’ 相与后大于0,说明重复*/bool isRepeated(string str){//为空必定不重复if(str.empty()){return false;}int length = str.size();if(length > 256){return true;}int flags[MAXSIZE];memset(flags , 0 , sizeof(flags) );for(int i = 0; i < length ; i++){int ch = str[i];//如果之前已经出现过了,那么说明重复if( 1 == flags[ch] ){return true;}//之前没有出现过else if(0 == flags[ch]){flags[ch] = 1;}}//如果之前一直都没有重复,走到这里说明也没有重复return false;}//假设只有'a'~'z' 26个字母,而一个int包含32位,则可以采用“&”的方式做bool isRepeated_aToZ(string str){//为空必定不重复if(str.empty()){return false;}int length = str.size();if(length > 256){return true;}int checker = 0;for(int i = 0 ; i < length ; i++){//注意要减去字符int ch = str[i] - 'a';int res = checker & (1 << ch);//说明该字母已经出现过,这里不是1,应该是大于0,因为不一定在1上if(res > 0){return true;}checker |= (1 << ch);}return false;}int main(int argc, char* argv[]){string sInput;char str[MAXSIZE];while(cin >> sInput){bool repeated = isRepeated(sInput);//bool repeated = isRepeated_aToZ(sInput);if(repeated){cout << "repeated" << endl;}else{cout << "different" << endl;}}system("pause");return 0;}
0 0
- 程序员面试金典: 9.1数组与字符串 1判断字符串所有字符全都不同
- 程序员面试金典1.1:确定字符串的所有字符是否全都不同
- C++判断字符串是否所有字符全都不同
- 程序员面试金典(1) 字符串是否所有字符不同
- 【Java,面试】实现一个算法,确定一个字符串的所有字符是否全都不同
- 程序员面试金典: 9.1数组与字符串 3判断一个字符串字符重新排列后是否可变成另一个字符串
- 确定一个字符串的所有字符全都不同算法实现
- 确定一个字符串的所有字符是否全都不同
- 编程:判断一个给定字符串中字符全都不同java
- 面试题1之确定一个字符串的所有字符是否全都不同
- 数组与字符串,判断字符串各个字符是否不同
- 程序员面试金典第一章:数组与字符串(1) 确定字符互异
- 【程序员面试金典】数组与字符串
- 程序员面试金典: 9.1数组与字符串 8判断两个字符串中一个字符串是否由另一个字符串旋转而成
- 【面试经典题之字符串】实现一个算法,确定一个字符串的所有字符是否全都不同。假设不允许使用额外的数据结构
- 判断字符串中的字符是否全都不同(字符类算法)
- 请实现一个算法,确定一个字符串的所有字符是否全都不同
- 程序员面试金典: 9.1数组与字符串 2写翻转字符串函数reverse(char* str)
- 用canvas实现图片滤镜效果
- form提交可能遇到的问题logo
- laravel的搜索后分页
- 队列
- Linux下Redis设置密码及开机自启动
- 程序员面试金典: 9.1数组与字符串 1判断字符串所有字符全都不同
- unity抗锯齿
- 阿里云 Centos7 安装AMP
- Map 遍历
- 优雅地退出所有的Activity
- bzoj 3611 [Heoi2014]大工程 虚树 dp
- 7
- 带你快速玩转canvas(6)导出为base64字符串和画笔的保存
- iOS 用自签名证书实现 HTTPS 请求的原理实例讲解