题目描述(补充完整):
题目:合法字符串的验证与构造
给定一个由小写字母、数字及括号((
和 )
)组成的字符串 s
,要求编写一个函数来验证该字符串是否为合法的括号序列,并且如果字符串中不包含非法的括号组合,则要求返回通过添加最小数量的字符(可以是任意字符,但为简化问题,这里假设我们只考虑添加括号)使该字符串成为合法括号序列的一种方法。如果原字符串已经是合法的括号序列,则直接返回原字符串。
合法括号序列的定义:
- 每个左括号
(
必须有一个对应的右括号)
。 - 每个右括号
)
必须有一个对应的左括号(
。 - 括号可以嵌套,但必须是正确嵌套的。
示例:
输入:s = "((abc))"
输出:"((abc))"
(已经是合法的括号序列,无需修改)
输入:s = "(abc"
输出:"(abc)"
(添加了一个右括号使其成为合法序列)
输入:s = "())"
输出:"()()"
(需要添加一个左括号来匹配第一个右括号)
注意:题目要求返回的是一种可能的合法括号序列,而非所有可能的序列。
PHP 示例代码
function makeValidString($s) {
$stack = [];
$result = '';
for ($i = 0; $i < strlen($s); $i++) {
$char = $s[$i];
if ($char == '(') {
array_push($stack, $char);
$result .= $char;
} elseif ($char == ')') {
if (empty($stack)) {
// 如果栈为空,说明没有匹配的左括号,添加一个左括号到结果中
$result .= '(';
}
array_pop($stack); // 匹配成功,移除栈顶元素
$result .= $char;
} else {
$result .= $char; // 非括号字符直接添加到结果中
}
}
// 如果栈中还有剩余左括号,说明缺少对应的右括号,依次添加
while (!empty($stack)) {
$result .= ')';
array_pop($stack);
}
return $result;
}
// 示例测试
echo makeValidString("((abc))"); // 输出: ((abc))
echo PHP_EOL;
echo makeValidString("(abc"); // 输出: (abc)
echo PHP_EOL;
echo makeValidString("())"); // 输出: ()()
Python 示例代码
def makeValidString(s):
stack = []
result = []
for char in s:
if char == '(':
stack.append(char)
result.append(char)
elif char == ')':
if not stack:
result.append('(') # 添加左括号以匹配
stack.pop() # 匹配成功,弹出栈顶元素
result.append(char)
else:
result.append(char) # 非括号字符直接添加
# 栈中剩余左括号需要添加对应的右括号
result.extend(')' * len(stack))
return ''.join(result)
# 示例测试
print(makeValidString("((abc))")) # 输出: ((abc))
print(makeValidString("(abc")) # 输出: (abc)
print(makeValidString("())")) # 输出: ()()
JavaScript 示例代码
function makeValidString(s) {
let stack = [];
let result = '';
for (let char of s) {
if (char === '(') {
stack.push(char);
result += char;
} else if (char === ')') {
if (stack.length === 0) {
// 栈为空,添加一个左括号
result += '(';
}
stack.pop(); // 匹配成功,弹出栈顶元素
result += char;
} else {
result += char; // 非括号字符直接添加
}
}
// 栈中剩余左括号需要添加对应的右括号
while (stack.length > 0) {
result += ')';
stack.pop();
}
return result;
}
// 示例测试
console.log(makeValidString("((abc))")); // 输出: ((abc))
console.log(makeValidString("(abc")); // 输出: (abc)
console.log(makeValidString("())")); // 输出: ()()
码小课网站中有更多相关内容分享给大家学习,涵盖了算法、数据结构、编程语言等多个方面,欢迎访问学习。