美文网首页
leetcode-20.有效的括号(OC)

leetcode-20.有效的括号(OC)

作者: money_ac9e | 来源:发表于2022-01-20 10:36 被阅读0次

20. 有效的括号

地址:https://leetcode-cn.com/problems/valid-parentheses/

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

示例 1:
输入:s = "()"
输出:true
示例 2:

输入:s = "()[]{}"
输出:true
示例 3:

输入:s = "(]"
输出:false
示例 4:

输入:s = "([)]"
输出:false
示例 5:

输入:s = "{[]}"
输出:true

方法1 特殊字符串替换法

不能使用(){}[]替换 因为顺序不同
肯定是考虑 遍历

字符串中包含(){}[] 就将(){}[]替换为空 最后不是空字符串 就是false

上代码

while ([str containsString:@"{}"] || [str containsString:@"()"] || [str containsString:@"[]"]) {
        str = [str stringByReplacingOccurrencesOfString:@"{}" withString:@""];
        str = [str stringByReplacingOccurrencesOfString:@"()" withString:@""];
        str = [str stringByReplacingOccurrencesOfString:@"[]" withString:@""];
    }
    
    return str.length == 0;

方法2 使用栈的思想

1.首先有效括号一定是相同类型左右闭合, 即偶数, 所以奇数先排除
2.将()放到字典中,方便匹配
3.for循环判断, 左括号依次入栈
4.右括号时需要先判断是否是否为空,如果是空数组就表示没有左括号 直接false
4.由于括号需要相同类型闭合, 所以依次判断右括号是否栈顶依次配对, 配对出栈, 不匹配弹出返回false
5.循环结束判断栈中元素是否为0

if (str.length%2 != 0) {
        return NO;
    }
    
    NSDictionary *params = @{@"(":@")",
                             @"{":@"}",
                             @"[":@"]"
    };
    
    NSMutableArray *items = [NSMutableArray array];
    
    for (int i=0; i<str.length; i++) {
        
        NSString *c = [NSString stringWithFormat:@"%c",[str characterAtIndex:i]];
        
        if ([params.allKeys containsObject:c]) {
            [items addObject:c];
        } else {
            if (items.count !=0 && [params[items.lastObject] isEqualToString:c]) {
                [items removeLastObject];
            } else {
                return NO;
            }
        }
    }
    
    return items.count == 0;

相关文章

  • leetcode-20.有效的括号(OC)

    20. 有效的括号 地址:https://leetcode-cn.com/problems/valid-paren...

  • LeetCode-20. 有效的括号-刷题思路分享

    这个题我一年前就AC了,写一下思路和算法。其实就是一个FILO后进先出栈,右括号匹配前一个入栈的左括号 左括号必须...

  • 回溯算法和深度优先搜索(二)

    先看一道题目: 括号生成。 输入一个整数 ,罗列出所有有效的括号组合。有效的括号组合是指 左括号开始,右括号结束,...

  • 括号生成 (有效括号)

    题目 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例: 输入...

  • Swift小运用

    控制流(即OC中的判断语句) 和OC的区别 1.if后面的小括号可以省略,大括号不能省略 2.swift中if后面...

  • 有效括号

    题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串...

  • 有效括号

    import java.util.*; /** 给定一个只包括 '(',')','{','}','[',']' 的...

  • 有效括号

    题目 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需...

  • 有效的括号

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足:...

  • 有效的括号

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:左...

网友评论

      本文标题:leetcode-20.有效的括号(OC)

      本文链接:https://www.haomeiwen.com/subject/npkjhrtx.html