现在的位置: 首页 > 综合 > 正文

【leetcode系列】Valid Parentheses

2019年06月09日 ⁄ 综合 ⁄ 共 1628字 ⁄ 字号 评论关闭

很经典的问题,使用栈来解决,我这里自己实现了一个栈,当然也可以直接用java自带的Stack类。

自己实现的栈代码:

import java.util.LinkedList;

class StackOne {
	LinkedList<Object> data;
	int top;
	int maxSize;

	StackOne(int size) {
		// TODO Auto-generated constructor stub
		top = -1;
		maxSize = 100;
		data = new LinkedList<Object>();
	}

	int getElementCount() {
		return data.size();
	}

	boolean isEmpty() {
		return top == -1;
	}

	boolean isFull() {
		return top + 1 == maxSize;
	}

	boolean push(Object object) throws Exception {
		if (isFull()) {
			throw new Exception("栈满");
		}
		data.addLast(object);
		top++;
		return true;
	}

	Object pop() throws Exception {
		if (isEmpty()) {
			throw new Exception("栈空");
		}
		top--;
		return data.removeLast();
	}

	Object peek() {
		return data.getLast();
	}
}

判断输出是否有效:

public class Solution {

	public static boolean isValid(String in) {
		StackOne stackOne = new StackOne(100);
		boolean result = false;
		char[] inArray = in.toCharArray();
		for (char i : inArray) {
			if (i == '(' || i == '[' || i == '{') {
				try {
					stackOne.push(i);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				continue;
			}
			if (i == ')') {
				if (stackOne.isEmpty()) {
					result = false;
				} else {
					char tmp = '\u0000';
					try {
						tmp = (Character) stackOne.pop();
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					if (tmp == '(') {
						result = true;
					}
				}
			}
			if (i == ']') {
				if (stackOne.isEmpty()) {
					result = false;
				} else {
					char tmp = '\u0000';
					try {
						tmp = (Character) stackOne.pop();
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					if (tmp == '[') {
						result = true;
					}
				}
			}
			if (i == '}') {
				if (stackOne.isEmpty()) {
					result = false;
				} else {
					char tmp = '\u0000';
					try {
						tmp = (Character) stackOne.pop();
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					if (tmp == '{') {
						result = true;
					}
				}

			}
		}
		if (!stackOne.isEmpty()) {
			result = false;
		}
		return result;
	}

	public static void main(String[] args) {
		System.out.print(isValid("(}"));
	}
}

抱歉!评论已关闭.