1.1

http://www.hawstein.com/posts/1.1.html

  • 实现一个算法,确定一个字符串的所有字符是否全都不同。假设可以使用额外的数据结构

* 算法1

  • 是否是ASCII字符
  • 判断是否大于256,若大于256,则错误
  • 设置256的bool数组,数组初始化为false
  • 遍历字符串当bool数组对应位置的值为真,表明该字符在之前已经出现过,
  • 即可得出该字符串中有重复字符。否则将该位置的bool数组 值置为true。

* 时间复杂度为O(n)。

* 算法2

  • 优化:位运算优化
  • 8 位代替256

  • 位运算:

http://blog.csdn.net/xiaoxiaoyu85/article/details/6334707


* 代码

#include <iostream>
#include<string>
#include<cstring>
using namespace std;

bool isUnique1(string s){
bool a[256];
memset(a,0,sizeof(a));
int len=s.length();
for(int i=0;i<len;++i){
int v=(int)s[i];
if(a[v]) return false;
a[v]=true;
}
return true;
}

bool isUnique2(string s)
{
int a[8];
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;
if(a[idx] & (1 << shift)) return false;
a[idx] |= (1 << shift);
}
return true;
}


int main(){
string s1="i am stud";
string s2="abcdefghjklop";
cout<<isUnique1(s1)<< " "<<endl;
}

results matching ""

    No results matching ""