⾯试题-python3字符串消消乐,将字符串中相邻相同的字符⼀起消掉,最后输出消除完成的字符串
题⽬
字符串消消乐,将字符串中相邻相同的字符⼀起消掉,最后输出消除完成的字符串
⽰例:abcccbxezzzrf7788fn
输出:axern
说明:从左住右消除,第⼀趟消除相邻相同的“ccc”、“zzz”、“77”、“88”,
得到abbxerffn,第⼆趟消除相邻相同的“bb”、“ff”,得到axern,
不存在相邻相同字符,消除结束。
只删除2个相邻的字母
给出由⼩写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执⾏重复项删除操作,直到⽆法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯⼀。
输⼊:"abbaca"
输出:"ca"
解释:
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯⼀可以执⾏删除操作的重复项。
之后我们得到字符串 "aaca",其中⼜只有 "aa" 可以执⾏重复项删除操作,所以最后的字符串为 "ca"。
# 作者-上海悠悠 QQ交流:717225969
# blog地址 wwwblogs/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地址 wwwblogs/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"

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。