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 }
View Code

相关文章: