[google面试CTCI] 1-1.判断一个字符串是否包含重复字符
来源:互联网 发布:机器设计软件 编辑:程序博客网 时间:2024/05/16 11:59
【字符串与数组】
Q:Implement an algorithm to determine if a string has all unique characters What if you
can not use additional data structures?
题目:实现一个算法来判断一个字符串是否包含重复字符。如果不能使用额外数据结构,怎么做?
解答:
方法一:从头到尾取字符串中的每一个字符,并将该字符与其后的字符依次比较,一旦发现重复的字符,就返回,表示该字符串含有重复字符串。
int is_unique(char * str){int len=strlen(str);int i,j;for(i=0;i<len-1;++i){ for(j=i+1;j<len;++j){if(str[i]==str[j]) return 0;}}return 1;}
方法二:如果假设字符串中的字符都是ascii字符(ascii码字符对应的数值范围为0-255),那么我们可以分配一个256字节大小的数组,并将该数组元素初始化为0。然后,遍历字符串中的字符,将字符对应的ascii码值作为数组下标,如若该数组元素为0,将其置为1;如若该数组元素为1,则说明该字符出现过,说明字符串含有重复字符。
int is_unique(char* str){int flags[256];int i;memset(flags,0,256);for(i=0;i<strlen(str);i++){ if(flags[str[i]]==1)return 0; flags[str[i]]=1;}return 1;}
方法三.由于方法二中用字符数组来表示一个字符(byte)是否出现过,事实上,只需要用一个位(bit)即可表示某个字符是否出现过,可以节约存储空间,因此,我们可以用位操作来改写方法二。
int is_unique_str2(char* str){int flags[8];//只需要8个32位的int,8*32=256位memset(flags,0,sizeof(flags));int i;int len=strlen(str);for(i=0;i<len;i++){int index=(int)str[i]/32;int shift=(int)str[i]%32;if(flags[index] & (1<<shift)) return 0;flags[index]|=(1<<shift);}return 1;}
作者:Viidiot 微信公众号:linux-code
- [google面试CTCI] 1-1.判断一个字符串是否包含重复字符
- [google面试CTCI] 1-4.判断两个字符串是否由相同字符组成
- [google面试CTCI] 1-5.替换字符串中特定字符
- [google面试CTCI] 1-8.判断子字符串
- 如何判断字符串是否包含重复字符
- CTCI系列--1.1 判断一个字符串中的字符是否唯一(C语言)
- [google面试CTCI] 2-1.移除链表中重复元素
- [google面试CTCI] 1-2 逆转c风格字符串
- [google面试CTCI]1-3.字符串去重
- 判断一个字符串中是否包含某个字符
- 判断一个字符是否包含在另一字符串中
- SQLSERVER 判断一个字符串是否包含特殊字符
- 判断一个字符串中是否包含某个字符
- 如何判断一个字符串中是否包含某一字符
- java 判断一个字符串是否包含某个字符
- java 判断一个字符串是否包含某个字符
- 判断一个字符串里面是否有重复的字符
- 检验字符串中是否包含重复字符
- 《Effective C++》读书笔记(六) 设计与声明(第二部分)
- Struts2自定义类型转换
- oracle rowid 使用注意事项
- iOS基础面试题(一)
- ExtJs中如何动态添加一个textfield的文本框
- [google面试CTCI] 1-1.判断一个字符串是否包含重复字符
- mysql安装出现error Nr.1045
- ubuntu升级到13.10后,发现启动gvim时有GLib-GObject-WARNING。
- 两个Combo box组合框控件关联xml中的数据
- 提给程序员和开发者的 10 道 Java 泛型面试题
- struts2 配合jaxl 制作Excel模板做的报表[云少原创](有了它就不需要每一个单元格都要一个一个敲代码了哈哈)
- mac 安装redis服务
- iOS开发-解析Html-TFHpple
- Android不同数据库间,表数据复制