.已知一个字符数组,设计一个高效算法,判断该数组中存放的字符串中左括号“ 和右括号")”是否匹配,并分析算法性能。
时间: 2024-10-21 20:12:50 浏览: 28
Java程序设计课件:5 数组与字符串_part1.ppt
要判断字符数组中的括号是否匹配,你可以使用双指针的方法,一个指针从左开始扫描字符串(代表左括号),另一个指针从右开始扫描(代表右括号)。每遇到一个左括号,就检查对应的右括号是否存在,并且位置相对应。如果在遍历过程中发现不匹配或者右括号用完了但还有未关闭的左括号,就可以确定字符串中的括号不匹配。
以下是一个简单的C语言实现:
```c
#include <stdbool.h>
bool isParenthesesMatch(char str[], int n) {
int left = 0, right = n - 1;
stack<char> s;
while (left <= right) {
if (str[left] == '(') {
s.push(str[left]);
left++;
} else if (str[right] == ')') {
if (s.empty() || s.top() != '(') {
return false; // 匹配失败,右括号先于左括号出现或没有对应的左括号
}
s.pop();
right--;
} else {
left++; // 如果都不是括号,直接移动到下一个字符
}
}
// 所有左括号都被处理了,如果栈为空则表示所有括号都成对出现
return s.empty();
}
```
这个算法的时间复杂度为O(n),其中n是字符串的长度。因为每个字符最多只会被遍历两次:一次是左指针查找,另一次是右指针查找。空间复杂度为O(min(m, n)),m是栈的最大容量,由于我们只会在栈中存储最左侧未匹配的左括号,所以最坏情况下等于n/2。
阅读全文