您的位置:首页 > 编程语言 > Python开发

[算法Rust,Go,Python,JS实现)]LeetCode之20-有效括号匹配

2019-03-14 10:44 821 查看
版权声明:未经博主允许不得转载(https://github.com/ai-word) https://blog.csdn.net/BaiHuaXiu123/article/details/88547680

题目

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

有效字符串需满足:

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

示例 1:

输入: "()"
输出: true
示例 2:

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

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

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

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

思路

利用栈的思想去解决
模拟stack,因此将字符串顺序读取一遍,要么入栈要么出栈,当出现左括号就入栈,
当出现右括号并且栈顶括号无法匹配成一对就入栈,当右括号可以和栈顶配对就把栈顶出栈。
一种特殊情况是,只有一个字符时比如’]‘,栈为空没有栈顶元素,
会报错超出索引范围,就随便用一个字符比如1,代替,最后跟这个字符进行比较就可以了,得到最终的结果

Rust语言实现

use std::collections::HashMap;
impl Solution {
pub fn is_valid(s: String) -> bool {
let mut stack = vec!["1".to_string()];
let mut map = HashMap::new();
map.insert(String::from("{"),"}");
map.insert(String::from("["),"]");
map.insert(String::from("("),")");
for it in s.chars() {
let c2s = it.to_string();
let ss = map.get(&c2s);
if let Some(b) = ss{
stack.push(c2s.clone());
} else {
let mut s1 = stack.pop().unwrap();
let s2 = map.get(&s1);
if let Some(U) = s2{
if *U != c2s {
return false;
}
} else {
return false;
}
}
}
if stack.len()==1{
return true;
} else {
return false;
}
}
}

Go语言

func isValid(s string) bool {
stack := make([]byte, 0)
for _, v := range s {
if v == '[' || v == '(' || v == '{' {
stack = append(stack, byte(v))
} else {
if (len(stack) != 0 && match(stack[len(stack)-1], byte(v))) {
stack = pop(stack)
continue
} else {
return false
}
}
}

if (len(stack) == 0) {
return true
} else {
return false
}
}
func match(left, right byte) bool {
switch right {
case ']':
if left != '[' {
return false
}
case ')':
if left != '(' {
return false
}
case '}':
if left != '{' {
return false
}
}
return true
}

func pop(stack []byte) []byte {
return stack[:len(stack)-1]
}

javaScript语言

var isValid = function(s) {
if(s == null||s.length <1){
return true;
}
var stack = [];
for(var i=0;i<s.length;i++){
if(s[i] == ""){
continue;
}
if(stack.leng<1){
stack.push(s[i]);
}else if(stack[stack.length-1]=="("&&s[i]==")" ||stack[stack.length-1]=="{"&&s[i]=="}" ||stack[stack.length-1]=="["&&s[i]=="]"){
stack.pop();
}else{
stack.push(s[i]);
}
}
return stack.length<1;
};

python语言

class Solution:
def isValid(self, s):
stack = list(['1'])
for st in s:
if st in ['(', '[', '{']:
stack.append(st)
elif (stack[len(stack)-1]+st) not in ['()', '[]', '{}']:
stack.append(st)
else:
stack.pop()
if stack == ['1']:
return True
else:
return False

结果

代码下载地址

代码下载地址 https://github.com/ai-word

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: