[導(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