zoukankan      html  css  js  c++  java
  • 数组与字符串二(例子、使用)

    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 );   

  • 相关阅读:
    bzoj2732[HNOI2012]射箭
    poj1474 Video Surveillance
    bzoj3167[HEOI2013]SAO
    hdu2296 Ring
    bzoj2119 股市的预测
    bzoj2244[SDOI2011]拦截导弹
    bzoj3502[PA2012]Tanie Linie(最大k区间和)
    vijos1859[TJOI2014]电源插排
    比较SQL查询性能 语句
    什么是高内聚低耦合
  • 原文地址:https://www.cnblogs.com/revenge/p/6086803.html
Copyright © 2011-2022 走看看