1 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
(1)可能出现的情况:
(1)"()"
(2)"()[]"
(3)"(])]"
(4)"((([]))"
(5)"]][["
(2) 时间复杂度
进栈出栈O(1),一次性操作,每个元素都会进行一次这样此操作,所以O(1)*n
(3)实现
c版本
1 bool isValid(char * s){ 2 if (s == NULL || s[0] == '\0') return true; 3 char *stack = (char*)malloc(strlen(s)+1); int top =0; 4 for (int i = 0; s[i]; ++i) { 5 if (s[i] == '(' || s[i] == '[' || s[i] == '{') stack[top++] = s[i]; 6 else { 7 if ((--top) < 0) return false;//先减减,让top指向栈顶元素 8 if (s[i] == ')' && stack[top] != '(') return false; 9 if (s[i] == ']' && stack[top] != '[') return false; 10 if (s[i] == '}' && stack[top] != '{') return false; 11 } 12 } 13 return (!top);//防止“【”这种类似情况 14 }