Leetcode日常刷码(1)解决字符串匹配问题(Java)

问题描述:

Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

An input string is valid if:

Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.

Example 1:

Input: "()"
Output: true
Example 2:

Input: "()[]{}"
Output: true
Example 3:

Input: "(]"
Output: false
Example 4:

 问题解决思路:

使用栈,遍历输入字符串

如果当前字符为左半边括号时,则将其压入栈中

如果遇到右半边括号时,分类讨论:

1)如栈不为空且为对应的左半边括号,则取出栈顶元素,继续循环

2)若此时栈为空,则直接返回false

3)若不为对应的左半边括号,反之返回false

代码实现:

package Algorithm;

import java.util.Stack;//导入java的stack,可以直接进行栈操作

public class Example1 {
	//首先写一个匹配的方法,具体为,所有的左括号都是入栈操作,所有的有括号都是出栈操作,
	//如果最后栈内元素为空,则匹配成功,否则匹配不成功(不包含开始空栈的情况)
	//所以需要进行异常处理
	public boolean Match(String expression){
		if (expression==null || expression==""){
			System.out.print("没有输入表达式或者表达式为空");
		}
		Stack<Character> stack = new Stack<Character>();//这里是调用java的stack类实现栈操作 
		for (int index = 0; index < expression.length(); index++){
			switch (expression.charAt(index)) {
			case '(':
				stack.push(expression.charAt(index));
				break;
			case ')':
				if (!stack.empty() && stack.peek()== '('){
					stack.pop();
				}
				break;
			case '{':
				stack.push(expression.charAt(index));
				break;
			case '}':
				if (!stack.empty() && stack.peek()== '{'){
					stack.pop();
				}
                break;
			case '[':
				stack.push(expression.charAt(index));
				break;
			case ']':
				if (!stack.empty() && stack.peek()== '['){
					stack.pop();
				}
			}
		}
		if (stack.empty())
			return true;
		return false;
	}
	public static void main(String[] args) {
		String expression = "(1+2)-5*{9}";
		Example1 object = new Example1();
		boolean flag = object.Match(expression);
		if (flag){
			System.out.print("匹配成功");
		}
		else{
			System.out.print("匹配不成功");
		}
	}
}
//1 boolean empty() 测试堆栈是否为空。
//2 Object peek( ) 查看堆栈顶部的对象,但不从堆栈中移除它。
//3 Object pop( ) 移除堆栈顶部的对象,并作为此函数的值返回该对象。
//4	Object push(Object element) 把项压入堆栈顶部。
//5	int search(Object element) 返回对象在堆栈中的位置,以 1 为基数

总结:属于算法中较为简单的算法,只需要了解栈的工作原理,就可以写出算法,一般这类算法会用在xml解析方面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值