Chinaunix首页 | 论坛 | 博客
  • 博客访问: 504469
  • 博文数量: 184
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1172
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-21 13:40
个人简介

技术改变命运

文章分类

全部博文(184)

文章存档

2020年(16)

2017年(12)

2016年(156)

我的朋友

分类: C/C++

2016-08-15 11:04:55

给定一长字符串a和一短字符串b,请问如何最快地判断出短字符串b中的所有字符是否都在字符串a中。
解法一:蛮力轮询:时间复杂度O(M*N);
解法2:排序轮询:时间复杂度O(mlongm)+O(nlongn)+O(m+n);
解法3:素数相乘:时间复杂度为O(M+N),乘积可能过大
解法4:位运算
c++代码如下:

点击(此处)折叠或打开

  1. #include<iostream>
  2. //#include<alogrithm>
  3. using namespace std;
  4. bool isContained(string &a,string &b)
  5. {
  6.     int hash = 0;//初值重要
  7.     for (int i = 0;i < a.length();i++)
  8.     {
  9.         hash |= (1 << (a[i]-'A'));
  10.     }
  11.     for (int j = 0;j < b.length();j++)
  12.     {
  13.         if ((hash & (1 << b[j]-'A')) == 0)
  14.             return false;
  15.     }
  16.     return true;
  17. }
  18. int main()
  19. {
  20.     string s1("ASD");
  21.     string s2("AF");
  22.     cout << isContained(s1,s2)<< endl;
  23.     return 0;
  24.     
  25. }
时间复杂度O(M+N)。
传说还有更简单的算法,望大神指教

阅读(737) | 评论(0) | 转发(0) |
0

上一篇:list_for_each_entry

下一篇:字符串的排列组合

给主人留下些什么吧!~~