博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode Valid Parenthesis String
阅读量:5049 次
发布时间:2019-06-12

本文共 1241 字,大约阅读时间需要 4 分钟。

原题链接在这里:

题目:

Given a string containing only three types of characters: '(', ')' and '*', write a function to check whether this string is valid. We define the validity of a string by these rules:

  1. Any left parenthesis '(' must have a corresponding right parenthesis ')'.
  2. Any right parenthesis ')' must have a corresponding left parenthesis '('.
  3. Left parenthesis '(' must go before the corresponding right parenthesis ')'.
  4. '*' could be treated as a single right parenthesis ')' or a single left parenthesis '(' or an empty string.
  5. An empty string is also valid.

 

Example 1:

Input: "()"Output: True

Example 2:

Input: "(*)"Output: True 

Example 3:

Input: "(*))"Output: True 

Note:

  1. The string size will be in the range [1, 100].

题解:

计数"("的数目. 遇到"("加一. 遇到")" 减一.

遇到"*". 可能分别对应"(", ")"和empty string 三种情况. 所以计数可能加一, 减一或者不变. 可以记录一个范围[lo, hi].

lo维持在0或以上的位置.

但若是hi都小于0, 说明确定的")"更多, 直接返回false.

否则看最后lo能否能停在0.

Time Complexity: O(s.length()). Space: O(1).

AC Java:

1 class Solution { 2     public boolean checkValidString(String s) { 3         if(s == null || s.length() == 0){ 4             return true; 5         } 6          7         int lo = 0; 8         int hi = 0; 9         for(int i = 0; i

 

转载于:https://www.cnblogs.com/Dylan-Java-NYC/p/7699029.html

你可能感兴趣的文章
objective-C学习笔记(六)继承与多态
查看>>
[转]Android Studio常用快捷键
查看>>
JVM参数配置及内存调优
查看>>
网页自适应
查看>>
【转】iOS - SQLite 数据库存储
查看>>
积木分发
查看>>
ASP.NET Core 1.1通过EF Core访问Mysql及linux调试
查看>>
常用第三方开源上传组件总结
查看>>
洗牌算法Fisher-Yates以及C语言随机数的产生
查看>>
lintcode-medium-Find the Missing Number
查看>>
网址url传递参数包含中文时乱码的问题的解决
查看>>
java——多线程并发库
查看>>
[js开源组件开发]js轮播图片支持手机滑动切换
查看>>
JSONObject的toBean 和 fromObject
查看>>
DoTween小结
查看>>
CURL 支持 GET、PUT、POST、DELETE请求
查看>>
.net(c#)中的new关键字
查看>>
【文智背后的奥秘】系列篇——文本聚类系统
查看>>
实时信号
查看>>
struct和typedef struct的区别
查看>>