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