面試題-python3 字符串消消樂,將字符串中相鄰相同的字符一起消掉,最后輸出消除完成的字符串


題目

字符串消消樂,將字符串中相鄰相同的字符一起消掉,最后輸出消除完成的字符串

示例:abcccbxezzzrf7788fn
輸出:axern

說明:從左住右消除,第一趟消除相鄰相同的“ccc”、“zzz”、“77”、“88”,
得到abbxerffn,第二趟消除相鄰相同的“bb”、“ff”,得到axern,
不存在相鄰相同字符,消除結束。

只刪除2個相鄰的字母

給出由小寫字母組成的字符串 S,重復項刪除操作會選擇兩個相鄰且相同的字母,並刪除它們。
在 S 上反復執行重復項刪除操作,直到無法繼續刪除。
在完成所有重復項刪除操作后返回最終的字符串。答案保證唯一。

輸入:"abbaca"
輸出:"ca"
解釋:
例如,在 "abbaca" 中,我們可以刪除 "bb" 由於兩字母相鄰且相同,這是此時唯一可以執行刪除操作的重復項。
之后我們得到字符串 "aaca",其中又只有 "aa" 可以執行重復項刪除操作,所以最后的字符串為 "ca"。

# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

S = 'abbaca'
st = []

for i in S:
    if len(st) == 0:
        st.append(i)
    elif i == st[-1]:
        st.pop()
    else:
        st.append(i)
print("".join(st))


運行結果會得到:ca
如果只考慮相鄰2個元素一樣,這樣消除是沒問題的,如果考慮到相鄰的3個元素一樣也刪除,就不能滿足需求了
如 S = 'abbbaca'

相鄰相同的字符一起消掉

在前面的基礎上加個判斷,判斷元素是否與上一個被消除的元素一樣(相鄰多個元素相同也刪除)

# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

# a = "abcccbxezzzrf7788fn"
# a = 'abcccdcececfc'
a = "1jj11j1"
s = []
# 前一個被消除的元素
del_str = ''
for i in a:
    # 棧為空,直接添加入棧
    if len(s) == 0:
        if del_str == '':
            # 判斷是首次添加,無消除字符
            s.append(i)
        else:
            # 如果不是首次,列表被刪空了
            if i == del_str:
                # 如果相等不做處理
                continue
            else:
                s.append(i)
                del_str = ''  # 還原del_str
    else:
        # 判斷i 與被前一個被消除的元素是都相等
        if i == del_str:
            # 如果相等不做處理
            continue
        # 判斷 i 與棧頂元素是否相等
        elif i == s[-1]:
            # 彈出棧頂元素
            del_str = s.pop(-1)
        else:
            # 入棧
            s.append(i)
            del_str = ''  # 還原del_str
print("".join(s))

測過三組數據:
a = "abcccbxezzzrf7788fn" 得到 "axern"
a = "abcccdcececfc" 得到 "abdcececfc"
a = "1jj11j1" 得到 "j1"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM