刪除字串中相鄰三個或以上重複的字元

2021-07-22 15:51:55 字數 1370 閱讀 3197

對於輸入的字串,我們需要完成的任務是從左到右掃瞄字串, 如果存在由三個以上(包括三個)連續相同字元組成的字串,就將這個子串從原串中去掉,並將原串剩下的部分拼接到一起。重複上述過程,直到無法去掉任何子串。

示例:         input

aaabccdddcb

aabbbabbba

outputbba

分析:對於這個問題,可能會有很多不同的解法,我採取的是一種最簡單的一種解決方法,暴力解決法。即從頭到尾遍歷整個字串,如果找到三個或者三個以上連續相同的字元,就把它刪除,然後再從頭開始,遍歷一遍,直到找不到三個或者三個以上連續相同的字元為止,這時候我們就可以認為果中不會再出現連續相同的三個字元。

具體實現:首先i=0,指向第乙個字元,從0開始遍歷,j=i+1,如果找到了連續相同的三個字元,即:string[i] == string[j] && string[j] == string[j+1],那麼就把j++,直到j指向連續相同的字元的最末尾的乙個,然後刪除本次找到的連續重複的字元,最後把i重新置0,從頭遍歷一遍,一直到i指向字串末尾『\0』才結束。

實現**如下:

[cpp]view plain

copy

/*阿里2023年筆試程式設計題(測試工程師2016.9.9)    

description:完全刪除字串中相鄰三個或以上重複的字元

檔名:deletetriple.cpp  

題目:對於輸入的字串,我們需要完成的任務是從左到右掃瞄字串,

如果存在由三個以上(包括三個)連續相同字元組成的字串,

就將這個子串從原串中去掉,並將原串剩下的部分拼接到一起。

重複上述過程,直到無法去掉任何子串。

示例:input

aaabccdddcb

aabbbabbba

outputbba

*/#include

#include

#include

void

deletetriple(

char

string);    

intmain(

void

)    

//完全刪除字串中相鄰三個或以上重複的字元:刪除當前連續相同的以及刪除後又有重複的   

//即結果中不會再出現連續相同的三個字元  

//如:"aaabccdddcb" -> "bb"  

void

deletetriple(

char

string)    

if(found)    

else

i++;    

}    

puts(string);    

}  

刪除字串中的所有相鄰重複項

給出由小寫字母組成的字串 s,重複項刪除操作會選擇兩個相鄰且相同的字母,並刪除它們。在 s 上反覆執行重複項刪除操作,直到無法繼續刪除。在完成所有重複項刪除操作後返回最終的字串。答案保證唯一。示例 輸入 abbaca 輸出 ca 解釋 例如,在 abbaca 中,我們可以刪除 bb 由於兩字母相鄰且...

刪除字串中的所有相鄰重複項

給出由小寫字母組成的字串 s,重複項刪除操作會選擇兩個相鄰且相同的字母,並刪除它們。在 s 上反覆執行重複項刪除操作,直到無法繼續刪除。在完成所有重複項刪除操作後返回最終的字串。答案保證唯一。示例 輸入 abbaca 輸出 ca 解釋 例如,在 abbaca 中,我們可以刪除 bb 由於兩字母相鄰且...

23 刪除字串中的所有相鄰重複項

給出由小寫字母組成的字串 s,重複項刪除操作會選擇兩個相鄰且相同的字母,並刪除它們。在 s 上反覆執行重複項刪除操作,直到無法繼續刪除。在完成所有重複項刪除操作後返回最終的字串。答案保證唯一。輸入 abbaca 輸出 ca 解釋 例如,在 abbaca 中,我們可以刪除 bb 由於兩字母相鄰且相同,...