LeetCode有效的括号

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:
输入: “()”
输出: true

示例 2:
输入: “()[]{}”
输出: true

示例 3:
输入: “(]”
输出: false

示例 4:
输入: “([)]”
输出: false

示例 5:
输入: “{[]}”
输出: true

// aa.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include "stdlib.h"
#include "stdio.h"
#include "string.h"
bool isValid(char* s) {
    char *str=s;
	char a[100];
	int i=0;
   while(*str!='\0')
   {
      
     if(*str=='(')
	 {
	   a[i]='(';
	  i++;
	 }else if(*str=='[')
	 {
	 a[i]='[';
	 i++;
	 } else if(*str=='{')
	 {
		 a[i]='{';
		 i++;
	 }
	 else if(*str==')')
	 { 
		  if(i<=0) return false;
		  i--;
		 if( a[i]=='(')
	    {
	     a[i]=' ';
		 }
		 else{
		  return false;
		 }
	 }
	 else if(*str==']')
	 { 
          if(i<=0) return false;
		  i--;
		 if(a[i]=='[')
		 {		
	     a[i]=' ';
	     }
		 else{
		  return false;
		 }
	 }
	 else if(*str=='}')
	 {
        if(i<=0) return false;
		i--;
		 if(a[i]=='{')
		 {
		 a[i]=' ';
		 } 
		 else{
		  return false;
		 }
	 }
     str++;
   }
  if( a[0]==' ')
   return true;
return false;
}
int _tmain(int argc, _TCHAR* argv[])
{
	 
	bool f=	isValid("()");
	if(f)
	printf("%s","匹配");
	else
	printf("%s","不匹配");
    system("pause");
    return 0;
}


也可以利用栈(Stack),先进后出的特点,利用while循环扫描字符串。如果字符是’(’,‘[’,’{'就进栈,如果扫描到与之匹配的字符就出栈。扫描完毕之后,判断字符串是否为空,空则返回true,否则返回false。

  typedef struct LNode
{
    int data;
    struct LNode * next;
} LNode,*LinkStack;

在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页