返回

揭秘腾讯算法独家秘笈:字符串解码快速入门指南

前端

大家好,我是神三元。今天给大家分享一道有意思的算法题,在leetcode平台上截图如下:

近半年来广受各大公司的青睐,出现非常频繁,在腾讯仅仅半年就出现了17次,如果说给满分给5颗星的话,那么这一题算得上实打实的五星题。

刚开始拿到这道题,看到括号匹配问题,直觉上就想到了利用栈的数据结构来解决。栈是一种先进后出(LIFO)的数据结构,可以用来检查括号是否匹配。

首先,我们把字符串中的字符一个一个地压入栈中。当我们遇到一个左括号时,就把它压入栈中。当我们遇到一个右括号时,我们就从栈中弹出一个字符。如果弹出字符与当前右括号匹配,则表明括号匹配成功;否则,括号匹配失败。

以下是使用栈来解决这道算法题的Python代码:

def is_valid(s):
    stack = []
    for char in s:
        if char == '(':
            stack.append(char)
        elif char == ')':
            if not stack:
                return False
            stack.pop()
    return not stack

s = "(()())"
print(is_valid(s))  # True

s = "(()"
print(is_valid(s))  # False

s = ")()())"
print(is_valid(s))  # False

除了使用栈来解决这道算法题之外,我们还可以使用递归来解决。递归是一种将问题分解为更小的子问题的技术。我们可以把字符串分成左右两部分,然后分别检查左右两部分的括号是否匹配。如果左右两部分的括号都匹配,则整个字符串的括号匹配成功;否则,整个字符串的括号匹配失败。

以下是使用递归来解决这道算法题的Python代码:

def is_valid(s):
    if not s:
        return True

    if s[0] == '(' and s[-1] == ')':
        return is_valid(s[1:-1])

    return False

s = "(()())"
print(is_valid(s))  # True

s = "(()"
print(is_valid(s))  # False

s = ")()())"
print(is_valid(s))  # False

希望这篇文章能对大家有所帮助。如果你对算法感兴趣,欢迎关注我的公众号,我会定期分享一些算法题解和学习资源。