在一个大串中查找和另外一个字符串是anagram的子串
来源:互联网 发布:代码编程 编辑:程序博客网 时间:2024/06/05 15:23
在一个大串中查找和另外一个字符串是anagram的子串。
比如,GetAnagram("abcdbcsdaqdbahs'', "scdcb'') ==> "cdbcs''。
思路:
用统计字符的方法来做。当然也可以用质数方法来做。
#include <iostream>#include <vector>#include <string>#include <assert.h>using namespace std;int GetAna(const string& s, const string& sub){assert(!s.empty() && !sub.empty());vector<int> cnt(26);vector<int> tvec(26);int sum = sub.size();for (int i = 0; i < sum; ++i)++cnt[sub[i] - 'a'];int i = 0;int size = s.size();bool flag;while (i <= size-sum){flag = true;//首先可以先检查当前子串有没有没出现过的字符//如果有,直接从未出现字符的下一个位置重新扫描for (int k = i+sum-1; k >= i; --k){if (cnt[s[k]-'a'] == 0){i = k + 1;flag = false;break;}}//如果当前子串的字符均出现过,开始扫描if (flag){tvec = cnt;//恢复初始的状态int j = i;for (; j < i+sum; ++j){//找到出现的字符,就将该字符次if (tvec[s[j]-'a'] > 0)--tvec[s[j]-'a'];//字符出现字符次数已经为0,说明不匹配else{++i;break;}}//如果扫描完sum个字符正常退出循环,说明找到串,返回子串的开始下标if (j == i + sum)return (j-sum);}}return -1;}void main(){string s("abcdbcsdaqdbahs");string sub("adcsq");cout << GetAna(s, sub) << endl;}
- 在一个大串中查找和另外一个字符串是anagram的子串
- 一个字符串是否是另外一个字符串的子字符串
- 判断一个字符串是否是另外一个字符串的子串
- 在一个字符串中查找另外一个字符串的全排列出现位置
- 查找一个字符串中包含另外一个字符串的次数
- 查找一个字符串中包含另外一个字符串的次数
- 使用boost查找区分大小写查找,查找一个字符串在另外一个字符串的位置,返回索引。
- C语言-在一个字符串中查找是否存在另外一个字符串+查找字符串大写字母个数
- 查找某字符串在另外一个字符串中最后出现的位置
- 判断一个字符串是否为另外一个字符串的子串
- 判断一个字符串是另外字符串的旋转字符串
- 如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,则字符串一称之为字符串二的子串。
- OC-在一个字符串中查找另一个字符串的范围;从一个字符串中提取子串
- 在一个字符串中查找最长回文子串
- java 在一个字符串中查找最大对称子串
- 在OC中怎样去查找一个字符串中有没有另外一个字符串
- 查找一个字符串的子字符集
- 查找字符串中一个子串的个数
- Java跳出多重循环
- UVA 12124 UVAlive 3971 Assemble(二分 + 贪心)
- POJ1269- Intersecting Lines
- java打印九九乘法表
- 机房收费系统总结之3——SqlHelper
- 在一个大串中查找和另外一个字符串是anagram的子串
- 错误都是低级的,不放弃才是高级的
- 电驴提示“该内容尚未提供权利证明,无法提供下载”之解决办法详解,极力推荐
- easyUI使用
- 杭电 1245
- 【PAT】1058. A+B in Hogwarts (20)
- java数据库编程
- as3.0正则表达式元字符$
- cookie&session