zoukankan      html  css  js  c++  java
  • 力扣(LeetCode)试题20-有效的括号 C++代码

    之前的思路有问题,只考虑到了( ) [ ] { } 、{( [ ] )},两种情况,忽略了 ( ( [ ] ) { } )这种复合情况。

    新思路:利用栈数据结构解决该问题。又学到了新东西,嘿嘿

    特殊情况:若字符串为空,返回true;若字符串为单数,返回false;若第一个字符为右括号,返回false!

    算法:遍历字符串,遇到左括号,将其压入站内

    遇到右括号, 取栈顶数据与之匹配:若成功,弹出栈顶数据继续判断下个字符,否则返回false

    代码如下:

     1 #include <iostream>
     2 #include <string>
     3 #include <stack>
     4 
     5 using namespace std;
     6 
     7 class Solution
     8 {
     9 public:
    10     bool isValid(string s)
    11     {
    12         int val = s.length();
    13         if (val == 0) return true;
    14         else
    15             if (val % 2 != 0) return false;//个数为奇数必为false
    16             else
    17             {
    18                 if (s[0] == ')' || s[0] == ']' || s[0] == '}')//若第一个字符为右括号,必为false
    19                     return false;
    20                 else
    21                 {
    22                     stack<char> space;//创建栈空间,遇到左括号,压栈;遇到右括号,将栈顶弹出与之比较。
    23 
    24                     for (int i = 0; i < val; i++)
    25                     {
    26                         if (s[i] == '(' || s[i] == '[' || s[i] == '{')
    27                         {
    28                             space.push(s[i]);
    29                             continue;
    30                         }
    31                         else
    32                         {
    33                             
    34
    35 char temp; 36 temp = space.top();//将栈顶的值赋值给temp 37 //由于栈里均为左括号,这里使用了比较笨的方法,将其转换为右括号,再与s[i]比较 38 //可以写一个函数,实现 39 if (temp == '(') 40 temp = ')'; 41 if (temp == '[') 42 temp = ']'; 43 if (temp == '{') 44 temp = '}'; 45 46 if (temp != s[i])//若栈顶数据与s[i]不匹配,则返回false,否则,弹出栈顶数据并继续循环 47 { 48 return false; 49 break; 50 } 51 else 52 { 53 space.pop(); 54 continue; 55 } 56 57 } 58 } 59 if (space.empty())//所有循环结束,如栈为空,则表示一一匹配成功,返回true 60 return true; 61 else return false; 62 } 63 } 64 } 65 }; 66 67 int main(){ 68 bool result; 69 Solution sol; 70 string str = "(([]){})"; 71 result = sol.isValid(str); 72 cout << result << endl; 73 int y; 74 cin >> y; 75 return 0; 76 }

  • 相关阅读:
    oracle 使用toad界面创建DBLINK
    oracle 批量修改
    blast原理
    Masked genomes/sequence
    HSP
    gapped alignment
    genBlastA
    用blastall进行序列比对
    formatdb
    download文件转为可执行格式
  • 原文地址:https://www.cnblogs.com/pgzhanglin/p/13218456.html
Copyright © 2011-2022 走看看