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


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

  • 相关阅读:
    linux下网络排错与查看
    linux下判断网络是否连接
    Linux 下操作gpio(两种方法,驱动和mmap)
    Kernel 中的 GPIO 定义和控制
    springboot jpa 解决延迟加载问题
    Hibernate @OneToOne懒加载实现解决方案
    Hibernate缓存和懒加载的坑你知道多少?这5个简单问题回答不上来就不敢说会用hibernate
    Spring Boot JPA 懒加载
    Spring Boot中使用Spring-data-jpa让数据访问更简单、更优雅
    Spring Data Jpa 详解 (配置篇)
  • 原文地址:https://www.cnblogs.com/revenge/p/6086803.html
Copyright © 2020-2023  润新知