Cho chuỗi s, lặp lại việc xóa nhóm ký tự trùng lặp liên tiếp đầu tiên. Trả về chuỗi cuối cùng.
Ví dụ: s = "xyyyxxz" → "z" (xóa "yyy" → "xxxz" → xóa "xxx" → "z").
Quy trình giải quyết
- Dùng ngăn xếp
stack. - Duyệt qua chuỗi với chỉ số
i. - Nếu đỉnh ngăn xếp bằng
s[i]:- Lấy
x = stack.pop(). - Bỏ qua tất cả các
xliên tiếp trong chuỗi. - Giảm
iđi 1 để kiểm tra lại ký tự tiếp theo.
- Lấy
- Ngược lại, đẩy
s[i]vào ngăn xếp. - Trả về chuỗi nối từ ngăn xếp.
Ví dụ mã nguồn
class Solution:
def solve(self, s):
stack = []
i = 0
while i < len(s):
if stack and stack[-1] == s[i]:
x = stack.pop()
while i < len(s) and x == s[i]:
i += 1
i -= 1
else:
stack.append(s[i])
i += 1
return "".join(stack)
ob = Solution()
s = "xyyyxxz"
print(ob.solve(s)) # Output: z
Đầu vào
"xyyyxxz"
Đầu ra
z