判断一个字符串中的字符是否唯一
来源:互联网 发布:猎天使魔女3知乎 编辑:程序博客网 时间:2024/06/05 22:46
/*实现一个算法来判断一个字符串中的字符是否唯一(即没有重复).不能使用额外的数据结构。 (即只使用基本的数据结构)*/#include <iostream> #include <cstring> using namespace std; bool is_unique1(string s) {//字符集是ASCII字符 bool a[256]; //占用较大内存 memset(a, 0, sizeof(a));//将a所指向的256个字节的内存初始化为0 int len = s.length();//不算'\0' for(int i=0; i < len; ++i) { int v = (int)s[i]; if(a[v]) return false; a[v] = true; } return true; } bool is_unique2(string s) { int a[8]; //8x4个字节足以表示256个位(每个位表示一个字符) memset(a, 0, sizeof(a)); int len = s.length(); for(int i=0; i < len; ++i) { int v = (int)s[i]; int idx = v/32, shift=v%32; //第v位在第idx个数组第shift位(每个数组有32位)的位置 if(a[idx] & (1 << shift)) return false; a[idx] |= (1 << shift); //将第v位置1 } return true; } bool is_unique3(string s) { //字符集是a~z(或A~Z) int check = 0;//4个字节足以表示26个位了 int len = s.length(); for(int i=0; i < len; ++i) { int v = (int)(s[i]-'a'); if(check & (1 << v)) return false; //s[i]所在的位为1,表示s[i]重复了,返回false check |= (1 << v); //分别将check的各个位 置1 } return true; }int main() { string s1 = "i am hawstein."; string s2 = "abcdefghijklmnopqrstuvwxyzABCD1234567890"; cout << is_unique1(s1) << " " << is_unique1(s2) << endl; cout << is_unique2(s1) << " " << is_unique2(s2) << endl; return 0; }
0 0
- 判断一个字符串中的字符是否唯一
- 判断一个字符串中的字符是否唯一
- 判断一个字符串中的字符是否唯一
- 判断一个字符串中的字符是否唯一
- 如何判断一个字符串中的字符是否唯一
- java 判断一个字符串中的字符是否唯一
- cc150:判断一个字符串中的字符是否唯一
- 1.1判断一个字符串中的字符是否唯一
- 1、判断一个字符串中的字符是否唯一
- 判断一个字符串字符是否唯一
- 判断字符串中的字符是否唯一
- 判断字符串中的字符是否唯一
- 判断一个字符串中的字符是否唯一(只用基本数据结构)
- 1.判断一个字符串中的字符是否唯一(CC150)---编程笔记
- CTCI系列--1.1 判断一个字符串中的字符是否唯一(C语言)
- 经典算法面试题目-判断一个字符串中的字符是否唯一(1.1)
- Arrays_Strings 判断字符串中的字符是否唯一@CareerCup
- 判断字符串中的字符是否具有唯一性
- Lesson 7: 初始化Direct3D
- maven内部运行原理解析(一)
- maven+springmvc+dubbo+zookeeper
- GitHub上Swift语言指南
- 针对phpstudy安装的时候出现 unknown storage engine innodb
- 判断一个字符串中的字符是否唯一
- 个人银行账户管理程序3.0
- 子网掩码和网关的作用
- Collections.unmodifiableList方法的使用与场景
- Web开发常用到的JavaScript代码区别和经验总结
- Object Detection 2015
- 安卓应用分配的内存大小
- 如何使用 Git 管理二进制大对象
- 运营商使用的朋友函数