100-33

33.(字符串)
实现一个挺高级的字符匹配算法:
给一串很长字符串,要求找到符合要求的字符串,例如目的串:123
1******3***2 ,12*****3这些都要找出来

其实就是类似一些和谐系统。。。。。

思路:看到这道题目的时候,开始是没有思路的。因为没大概看清楚题目的意思。后来在网上搜了下,自己又慢慢理解了下。猜想题目大概的意思,可能是要匹配目标字符串,只要里面包含模式中所有的字符就算匹配成功,不用考虑顺序。这种情况下,很容易想到以前的O(mn)的方法。但是有没有再快点的呢?答案是肯定的,我们在这里需要借助hash算法。

贴上代码:

/*=========================================================*\
33.(字符串)
实现一个挺高级的字符匹配算法:
给一串很长字符串,要求找到符合要求的字符串,例如目的串:123
1******3***2 ,12*****3这些都要找出来
其实就是类似一些和谐系统。。。。。
\*=========================================================*/
#include <iostream>

using namespace std;

bool isMatch(char *src,char *des){
	int srcLen = strlen(src);
	int desLen = strlen(des);
	int hashTable[256] = {0};
	for(int i = 0;i < srcLen ; ++i){
		hashTable[src[i]] = 1;
	}
	for(int i = 0;i < desLen ; ++i){
		if(0 == hashTable[des[i]]){
			return false;
		}
	}
	return true;
}

int main(){
	char src[] = "234335adfas234";
	char des[] = "123";
	cout << isMatch(src,des) << endl;
	system("pause");
	return 1;
}

你可能感兴趣的:(100-33)