数组与字符串,判断字符串各个字符是否不同
2015-08-15 21:28
302 查看
#include<string>
using namespace std;
bool isUniqueChars2(string str)
{
if (str.length() > 256) return false;
bool *char_set = new bool[256];
memset(char_set, 0, sizeof(bool) * 256);
for (int i = 0; i < str.length(); i++)
{
int val = str[i];
if (char_set[val])//这个字符已经在字符串中出现过
{
return false;
}
char_set[val] = true;
}
return true;
}
这段代码的时间复杂度为O(n),其中n为字符串长度,空间复杂度为O(1).
使用位向量,可以将空间占用减少为原先的1/8.下面的代码假设字符串只含有小写字母a到z.这样一来,我们只需使用一个int型变量。
#include<string>
using namespace std;
bool isUniqueChars(string str)
{
if (str.length > 26) return false;
int checker = 0;
for (int i = 0; i < str.length(); i++)
{
int val = str[i] - 'a';
if ((checker& (1 << val)) > 0)
{
return false;
}
checker |= (1 << val);
}
return true;
}
相关文章推荐
- Uva 401 Palindromes
- HDU 5391 Zball in Tina Town(判素数)
- 实现reverse字符串
- 数据结构学习笔记――线性表
- 背景滚动视差的一个页面[仿雅虎邮箱主页]
- 10.2KVM嵌套虚拟化原理
- hdoj 2187 悼念512汶川大地震遇难同胞——老人是真饿了
- 刀哥多线程Barrier异步gcd-08-barrier_async
- elnode入门
- DreamWeaverCC2015
- Spring MVC请求映射常见的三种方式
- @property命名时的要点与要注意的问题
- java继承知识总结
- 正方形
- 从上往下打印二叉树(算法)
- MyBatis基础
- C++ Primer 第(4-5)章一句话知识点总结
- 10.1 Qemu的网络管理
- 查看Oracle中是否有锁表的sql
- [Linux 运维 -- 存储] /proc/diskstats详解