字符串匹配之通配符問題--創(chuàng)新互聯(lián)

一串長為M的珠子,珠子的顏色有N種(N<10)。求包含N種顏色的最短連續(xù)珠串。

創(chuàng)新互聯(lián)建站科技有限公司專業(yè)互聯(lián)網(wǎng)基礎服務商,為您提供成都二樞服務器租用托管高防主機,成都IDC機房托管,成都主機托管等互聯(lián)網(wǎng)服務。

//兩個指針,開始的時候都指向某一個位置,移動前一個指針,直到兩個指針直接包含了所有顏色的珠子。

//此時記下len。

//然后向前移動后面的指針,再調(diào)整最前面的指針,直到重新滿足兩個指針間包含了所有的顏色,比較此時的len和之前的len,取最小值。

//如此移動,直到后面的指針回到起始位置。

//時間復雜度是O(N),空間復雜度是O(1)

#include<iostream>
using namespace std;
void Search(char* src,char* ch)
{
	int varies = 0;//多少種顏色
	char* begin = src;
	memset(ch, 0, sizeof(char) * 256);
	while (*begin++)
	{
		if (ch[*begin - '0']++ == 0)
		{
			++varies;
		}
	}
	//此時varies存儲共有多少種顏色
	int MinLength = 0;
	int curLength = 0;
	char* prev = src;
	char* cur = src;
	int curVaries = 0;
	char* ret = NULL;
	memset(ch, 0, sizeof(char) * 256);
	while (1)
	{
		curLength = 0;
		curVaries = 0;
		cur = prev;
		memset(ch, 0, sizeof(char) * 256);
		while (curVaries != varies)
		{
			if (++ch[*cur - '0']==1)
			   curVaries++;
			++cur;
			++curLength;
			if (*cur == '\0')
				cur = src;
		}
		if (MinLength == 0 || MinLength > curLength)
		{
			MinLength = curLength;
			ret = prev;
		}
		if (MinLength == varies)
			break;//得到最短的
		++prev;
		if (*prev =='\0')
			break;
	}
	int flag = 1;
	int index = 0;
	for (int i = 0; i < MinLength; ++i)
	{
		if (ret[i] == '\0')
			flag = 0;
		if (flag == 1)
			ch[i] = ret[i];
		else
			ch[i] = src[index++];
	}
	ch[MinLength] = '\0';
}
void Test1()
{
	char* src = "abbcdabcddddacgd";
	char ch[256] = { 0 };
	Search(src,ch);
	cout<<ch<< endl;
}
//所得結果應該是cgdab

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡助力業(yè)務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調(diào)度,確保服務器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務器買多久送多久。

分享題目:字符串匹配之通配符問題--創(chuàng)新互聯(lián)
瀏覽路徑:http://bm7419.com/article40/ggoeo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設、云服務器軟件開發(fā)、微信小程序App設計、外貿(mào)網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作