数组与字符串二(例子、使用)

1、哈希表的使用

判断一个字符串所有字符是否都是唯一的。

分析:判断是否唯一,用哈希表或者bitset判断元素是否出现。如果考虑哈希表,建立键-值对是关键,可以用字符直接作为键,出现次数作为值。判断是否唯一,那么只需要判断哈希表中是否已经存在当前键,所以可以通过利用insert函数的返回值,做出相应的判断。

如果,利用bitset,则需要建立字符到整数下标的映射关系。

考虑复杂度:

哈希表和bitset都需要扫描整个字符串,每次插入操作的时间复杂度O(1),假设字符长度为n,平均的时间复杂度就是O(n),空间上,每个合法的字符都有可能出现,假设字符集大小为m,则平均空间是O(m),哈希表的数据结构需要占据更多的空间,所以bitset是更合理的数据结构。

参考:

 bool isUnique(string input){
  bitset<256> hashMap;
  for (int i = 0; i < input.length; i++){
   if (hashMap[(int)input[i]]){
    return false;
   }
   hashMap[(int)input[i]] = 1;
  }
  return true;
 }

延伸:

1、Bitset是C++语言的一个类库。

Abitset stores bits (elements with only two possible values: 0 or 1, true or false, ...). bitset对象存储位(元素只有两个可能的值:0或1)

具体可参考:http://www.cplusplus.com/reference/bitset/bitset/

2、insert函数

C++容器的insert()函数有以下三种用法: 最终*it=val;  

//用法1:在指定位置it前“插入”值为val的元素,返回指向这个元素的迭代器,  

iterator insert( iterator it, const TYPE &val );   

//用法2:在指定位置it前“插入”num个值为val的元素   

void insert( iterator it, size_type num, const TYPE &val );   

//用法3:在指定位置it前“插入”区间[start, end)的所有元素.   

void insert( iterator it, input_iterator start, input_iterator end );   

 

posted @ 2016-11-21 20:26  恨revenge  阅读(151)  评论(0编辑  收藏  举报