LeetCode--3561. 移除相邻字符

3561. 移除相邻字符

给你一个由小写英文字母组成的字符串 s

必须 在字符串 s 中至少存在两个 连续 字符时,反复执行以下操作:

  • 移除字符串中 最左边 的一对按照字母表 连续 的相邻字符(无论是按顺序还是逆序,例如 'a''b',或 'b''a')。

  • 将剩余字符向左移动以填补空隙。

当无法再执行任何操作时,返回最终的字符串。

**注意:**字母表是循环的,因此 'a''z' 也视为连续。


鱼鱼了,刷了 300 道题,算术评级 3 的都写不出来,看来是 dp 刷傻了,周赛的时候还以为用 dp 很简单,这里直接用栈来判断,邻项消除,是一个经典的栈的应用。

func resultingString(s string) string {
    st := []byte{}
    for _, b := range s {
        st = append(st, byte(b))
        if len(st) > 1 && Check(st[len(st) - 1], st[len(st) - 2]) {
            st = st[:len(st) - 2]
        }
    }
    return string(st)
}

func Check(a, b byte) bool {
	d := abs(int(a) - int(b))
	return d == 1 || d == 25
}

func abs(x int) int {
    if x > 0 {
        return x
    }
    return - x
}

最后更新于