返回
揭秘腾讯算法独家秘笈:字符串解码快速入门指南
前端
2023-12-14 00:59:55
大家好,我是神三元。今天给大家分享一道有意思的算法题,在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
希望这篇文章能对大家有所帮助。如果你对算法感兴趣,欢迎关注我的公众号,我会定期分享一些算法题解和学习资源。