一串長為M的珠子,珠子的顏色有N種(N<10)。求包含N種顏色的最短連續(xù)珠串。
創(chuàng)新互聯(lián)建站科技有限公司專業(yè)互聯(lián)網(wǎng)基礎(chǔ)服務(wù)商,為您提供成都二樞服務(wù)器租用托管,高防主機(jī),成都IDC機(jī)房托管,成都主機(jī)托管等互聯(lián)網(wǎng)服務(wù)。//兩個指針,開始的時候都指向某一個位置,移動前一個指針,直到兩個指針直接包含了所有顏色的珠子。
//此時記下len。
//然后向前移動后面的指針,再調(diào)整最前面的指針,直到重新滿足兩個指針間包含了所有的顏色,比較此時的len和之前的len,取最小值。
//如此移動,直到后面的指針回到起始位置。
//時間復(fù)雜度是O(N),空間復(fù)雜度是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; } //所得結(jié)果應(yīng)該是cgdab
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。
分享題目:字符串匹配之通配符問題--創(chuàng)新互聯(lián)
瀏覽路徑:http://jinyejixie.com/article40/ggoeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、云服務(wù)器、軟件開發(fā)、微信小程序、App設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容