当前位置:实例文章 » 其他实例» [文章]有效的括号&&删除字符串中所有相邻重复项(LeetCode20&&1047)

有效的括号&&删除字符串中所有相邻重复项(LeetCode20&&1047)

发布人:shili8 发布时间:2025-01-23 10:08 阅读次数:0

**有效的括号 && 删除字符串中所有相邻重复项**

###问题描述####有效的括号 (LeetCode20)

给定一个只包含 '(' 和 ')' 的字符串,判断该字符串是否有效。

一个有效的括号序列需要满足:左括号必须在右括号之前出现。每个左括号都有一个匹配的右括号,并且左括号和右括号的数量是相等的。

#### 删除字符串中所有相邻重复项 (LeetCode1047)

给定一个由小写字母组成的非空字符串 `s`,删除该字符串中所有相邻重复项。返回结果字符串。

### 解决方案####有效的括号我们可以使用栈来解决这个问题。对于每个左括号,我们将其压入栈中;对于每个右括号,我们检查栈是否为空。如果栈不为空,则弹出栈顶元素(即匹配的左括号)。如果栈为空,则意味着没有匹配的左括号,因此该字符串无效。

def isValid(s: str) -> bool:
 stack = []
 for char in s:
 if char == '(':
 # Push left parenthesis into the stack stack.append(char)
 elif char == ')':
 # Check if the stack is empty or pop a left parenthesis from the stack if not stack or stack.pop() != '(':
 return False # If the stack is empty, it means all parentheses are matched return not stack


#### 删除字符串中所有相邻重复项我们可以使用两个指针来解决这个问题。一个指针用于遍历原始字符串,另一个指针用于构造结果字符串。

def removeDuplicates(s: str) -> str:
 result = []
 for char in s:
 # If the last character in the result is the same as the current character, skip it if result and result[-1] == char:
 continue # Otherwise, append the character to the result result.append(char)
 return ''.join(result)


###代码注释####有效的括号* 我们使用一个栈来存储左括号。
* 对于每个右括号,我们检查栈是否为空。如果栈不为空,则弹出栈顶元素(即匹配的左括号)。
* 如果栈为空,则意味着没有匹配的左括号,因此该字符串无效。

#### 删除字符串中所有相邻重复项* 我们使用两个指针来遍历原始字符串和构造结果字符串。
* 对于每个字符,我们检查是否是相邻重复项。如果是,则跳过它;否则,追加到结果字符串中。

### 示例代码####有效的括号
# Test case1: Valid parentheses stringprint(isValid("()")) # Output: True# Test case2: Invalid parentheses stringprint(isValid(")(")) # Output: False# Test case3: Empty stringprint(isValid("")) # Output: True


#### 删除字符串中所有相邻重复项
# Test case1: String with no duplicatesprint(removeDuplicates("abc")) # Output: "abc"

# Test case2: String with duplicatesprint(removeDuplicates("aabbc")) # Output: "ab"


### 总结在本文中,我们讨论了两个 LeetCode问题:有效的括号和删除字符串中所有相邻重复项。我们使用栈和两个指针来解决这两个问题,并提供示例代码和注释。

相关标签:算法
其他信息

其他资源

Top