當(dāng)前位置:首頁 > 芯聞號 > 充電吧
[導(dǎo)讀]實現(xiàn)一個挺高級的字符匹配算法: 給一串很長字符串,要求找到符合要求的字符串,例如目的串:123,1******3*****2,12******3這些都要找出來 其實就是一些和諧系統(tǒng)。。 與此題類似:給

實現(xiàn)一個挺高級的字符匹配算法:

給一串很長字符串,要求找到符合要求的字符串,例如目的串:123,1******3*****2,12******3這些都要找出來

其實就是一些和諧系統(tǒng)。。

與此題類似:給一個很長的字符串str, 還有一個字符集比如{a,b,c},找出str包含{a,b,c}的最短子串,要求O(n)。

/*
用兩個變量 front,rear 指向一個的子串區(qū)間的頭和尾(當(dāng)然,開始時front和rear都指向字符串開始處)。
用一個int cnt[255]={0}記錄當(dāng)前這個子串里字符集a,b,c各自的個數(shù),一個變量count記錄字符集里有多少個了
rear 一直加,更新cnt[]和count的值,直到count等于字符集個數(shù)
然后front++,直到cnt[]里某個字符個數(shù)為0(front 開始的部分有可能和后面的重復(fù),所以front要加到某個字符個數(shù)為0),
這樣就找到一個符合條件的字串了,繼續(xù)下去,可以求出所有符合條件的串,同時可以求出滿足條件最短子串

*/

#include 
using namespace std;

void MinSubString( char *src, char *des )
{
	int min=1000;//找最短子串
	int minfront=0;//最短子串開始位置
	int minrear=0;//最短子串結(jié)束位置
	int front,rear;
	front=rear=0;
	int len=strlen(des);
	int hashtable[255]={0};
	int cnt[255]={0};
	int cnt2[255]={0};
	for(int i=0; i