精华内容
下载资源
问答
  • java 括号匹配

    2019-10-17 10:12:37
    *括号匹配 * 1.用栈实现,如果读取字符为左括号,入栈 * 2.如果读取字符为右括号 * 栈为空,返回false * 栈不为空,和栈顶比较,是否匹配,匹配出栈一次,不匹配返回false * 3.最后栈不为空,返回false,...
    /*
     *括号匹配
     * 1.用栈实现,如果读取字符为左括号,入栈
     * 2.如果读取字符为右括号
     *   栈为空,返回false
     *   栈不为空,和栈顶比较,是否匹配,匹配出栈一次,不匹配返回false
     * 3.最后栈不为空,返回false,栈为空返回true
     */
    import java.util.HashMap;
    import java.util.LinkedList;
    import java.util.Map;
    
    public class BracketMatch {
    	/*
    	 * 功能描述
    	 * @author peinishangrichu
    	 * @date 2019/10/17
    	 * @param st
    	 * @return 是否匹配
    	 */
    	public static boolean isMatch(String str) {
    		// 用map定义括号匹配关系
    		Map<Character, Character> map = new HashMap<Character, Character>();
    		map.put(')', '(');// map[key,value]
    		map.put('}', '{');// map[key,value]
    		map.put(']', '[');// map[key,value]
    
    		int length = str.length();// 字符串长度
    		LinkedList<Character> stack = new LinkedList<Character>();
    		for (int i = 0; i < length; i++) {
    			if (map.containsValue(str.charAt(i))) {// 如果为左括号,入栈
    				stack.push(str.charAt(i));
    			}
    			if (map.containsKey(str.charAt(i))) {// 如果为右括号,判断栈是否为空
    				if (stack.isEmpty()) {
    					return false;
    				} else if (stack.peek() == map.get(str.charAt(i))) {
    					stack.pop();
    				} else
    					return false;
    			}
    		}
    
    		if (stack.isEmpty()) {// 寻循环遍历完成判断栈是否为空
    			return true;
    		} else
    			return false;
    	}
    
    	public static void main(String[] args) {
    		System.out.println(isMatch("{()[()]}"));// 情况1:true
    		System.out.println(isMatch("({)}"));// 情况2:false
    		System.out.println(isMatch("()))(("));// 情况3:false
    		System.out.println(isMatch((4+1)*{[(3-2)+(3-1)*2]*(4+5)}"));// 情况4:true
    	}
    }
    
    
    展开全文
  • java括号匹配

    2019-06-13 10:06:03
    import java.util.LinkedList; public class CharDemo { private LinkedList<Character> stack = new LinkedList(); /** * @param args */ public static void main(String[] args) { CharDemo matcher ...
     
    package com.duapp.itfanr;
    
    public class CharDemo{
    	public static boolean isMatch(String value) {
    		int numCount = 0, numMatch = 0;
    		for (int i=0; null != value && i<value.length(); i++) {
    			char ch = value.charAt(i);
    			if (ch == '{') {
    				numCount ++;
    				numMatch ++;
    			} else if (ch == '}') {
    				numCount --;
    			}
    			if (numCount < 0) {
    				return false;
    			}
    		}
    
    		return (numMatch > 0 && numCount == 0);
    	}
    
    	public static void main(String args[])  {
    		System.out.println( "=========must false=====" );
    		System.out.println( isMatch(null) );
    		System.out.println( isMatch("") );
    		System.out.println( isMatch("ddddd") );
    		System.out.println( isMatch("d{dddd") );
    		System.out.println( isMatch("dd{}}ddd") );
    		System.out.println( isMatch("d}dd{dd") );
    
    		System.out.println( "=========must true=====" );
    		System.out.println( isMatch("dd{}ddd") );
    		System.out.println( isMatch("ddd{{}d}d") );
    		System.out.println( isMatch("d{d{d}d}d") );
    	}
    }
     
    package com.duapp.itfanr;
    
    import java.util.LinkedList;
    
    public class CharDemo
    {
    	private LinkedList<Character> stack = new LinkedList<Character>();
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args)
    	{
    		CharDemo matcher = new CharDemo();
    		System.out.println(matcher.matches("{{{{}}a}ab}}"));
    	}
    
    	public boolean matches(String string)
    	{
    		if (string == null || string.length() == 0 || string.trim().equals(""))
    			return true;
    		int i = 0;
    		while (i < string.length())
    		{
    			char ch = string.charAt(i);
    			if (ch == '{')
    			{
    				stack.push(ch);
    			}
    			else if (ch == '}')
    			{
    				if (stack.isEmpty())
    					return false;
    				stack.pop();
    			}
    			i++;
    		}
    
    		if (!stack.isEmpty())
    			return false;
    		return true;
    	}
    }
    参考: [1]. http://www.iteye.com/topic/1055854

    转载于:https://my.oschina.net/itfanr/blog/195704

    展开全文
  • 想起了当年学习C++时,遇到的括号匹配的问题,反正一直都没有解决它,都怪自己太懒。今天用java简单的实现了,算是一种补充吧。public class StackDemo {public static void main(String[] args) {String str = "{{{...

    这两天正在学习抽象数据结构。想起了当年学习C++时,遇到的括号匹配的问题,反正一直都没有解决它,都怪自己太懒。今天用java简单的实现了,算是一种补充吧。

    public class StackDemo {

    public static void main(String[] args) {

    String str = "{{{a+b}}}(())";

    char [] c = str.toCharArray();

    if(isMatch(c)){

    System.out.println("匹配");

    }else

    System.out.println("不匹配");

    }

    public static boolean isMatch(char[] c){

    Stack stack = new Stack();

    int length = c.length;

    char temp;

    boolean b = true;

    for(int i = 0;i

    temp = c[i];

    if(temp =='{'||temp=='(')

    //碰到开放括号时,就进栈。

    stack.push(temp);

    if(temp=='}'||temp==')'){

    //碰到闭合括号时,就分情况判断

    //如果栈已为空,那么肯定是不匹配的了。

    if(stack.isEmpty()){

    b = false;

    break;

    }else{

    //如果不为空,则判断栈顶的括号是不是与现有的括号匹配

    //是则将栈顶元素做出栈操作,否则肯定又是不匹配。

    if((temp=='}'&&stack.peek()=='{')||

    (temp==')'&&stack.peek()=='(')){

    stack.pop();

    }else{

    b = false;

    break;

    }

    }

    }

    }

    //当所有闭合括号都匹配完时,如果栈不为空,那么就表示还有开放括号没有匹配。

    if(!stack.isEmpty()){

    return b;

    }

    return b;

    }

    } 这里就没有自己写Stack了,调用了Java API中的Stack类。

    展开全文
  • import java.util.Vector;class Stack{private int cursor=0;private int[] stackBody=new int[99];Stack(){cursor=0;for(int i=0;i<99;i++)stackBody[i]=-1;}public int getValue(){return stackBody[cursor];}p...

    import java.util.Vector;

    class Stack{

    private int cursor=0;

    private int[] stackBody=new int[99];

    Stack(){

    cursor=0;

    for(int i=0;i<99;i++)

    stackBody[i]=-1;

    }

    public int getValue(){

    return stackBody[cursor];

    }

    public void push(int value){

    cursor++;

    stackBody[cursor]=value;

    }

    public void pop(){

    stackBody[cursor]=-1;

    cursor--;

    }

    }

    public class Test {

    private int left[]=new int[99];

    private int right[]=new int[99];

    private int counter=0;

    private Vector subReg=new Vector();

    private int pos=0;

    private int sublastIndex=0;

    public void getSubreg(String str){

    Stack temp=new Stack();

    while(pos

    if(pos==0){

    if(str.charAt(pos)=='('){

    left[counter++]=pos;

    temp.push(pos);

    }

    }

    if((pos>0)&&(str.charAt(pos-1)!='//')){

    if(str.charAt(pos)=='('){

    left[counter++]=pos;

    temp.push(pos);

    }

    else if(str.charAt(pos)==')'){

    for(int i=0;i<99;i++){

    if(left[i]==temp.getValue()){

    right[i]=pos;

    break;

    }

    }

    temp.pop();

    }

    }

    pos++;

    }

    for(int i=0;i

    subReg.addElement(str.substring(left[i]+1, right[i]));

    System.out.println("result:"+subReg);

    }

    public static void main(String []args){

    Test test=new Test();

    test.getSubreg("(z)((a+)?(b+)?(c))*");

    }

    }

    显示顺序非运算顺序,是正则表达式子式的顺序o(∩_∩)o...

    展开全文
  • 其中有一项就是括号匹配的检测。今天我们来谈一谈其中的原理。先上图图片发自简书App再上代码import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Scanner;class Stack{ch...
  • /**括号匹配* 1.用栈实现,如果读取字符为左括号,入栈* 2.如果读取字符为右括号* 栈为空,返回false* 栈不为空,和栈顶比较,是否匹配,匹配出栈一次,不匹配返回false* 3.最后栈不为空,返回false,栈为空返回true...
  • 有效字符串需满足:左括号必须用相同类型的右...如果为右括号,我们先判断栈是否为空(有可能字符串刚开始就是一个右括号呢),为空的话直接返回false,不为空时判断:栈顶元素和下一个要入栈的元素是否相匹配,若匹...
  • java 括号匹配 成对

    2019-04-17 23:31:00
    java 括号匹配 成对 import java.util.Stack; public class Solution { public static void main(String[] args) { Solution s = new Solution(); ...
  • 其中有一项就是括号匹配的检测。今天我们来谈一谈其中的原理。先上图图片发自简书App再上代码import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Scanner;class Stack{ch...
  • JAVA括号匹配深度

    2019-03-14 18:33:25
    爱奇艺 2018 秋招 Java: 一个合法的括号匹配序列有以下定义: 空串""是一个合法的括号匹配序列 如果"X"和"Y"都是合法的括号匹配序列,"XY"也是一个合法的括号匹配序列 ...
  • java括号匹配算法

    千次阅读 2013-08-31 16:22:01
    java括号匹配算法 import java.util.Vector; class Stack{  private int cursor=0;  private int[] stackBody=new int[99];    Stack(){  cursor=0;  for(int i=0;i  stackBody[i]=...
  • 如何使用栈来判定括号是否匹配对于给定的表达式,可以使用栈来实现括号匹配判定,这个算法在编译器中非常重要,解析器每次读入一个字符,如果字符是一个开分隔符,如(,【,{,入栈,若读入的是闭分隔符),】,},...
  • 3[(])(])([[]()])样例输出NoNoYesimport java.util.Scanner;import java.util.Stack;/*** @author Owner**/public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n...
  • /***要求输入一行字符,输出e69da5e887aa62616964757a686964616f31333264633436配对的括号和不配对的括号的位置*例如:*输入:(a+b))(*输出:左边第1位括号和左边第5位括号对应,左边第6位括号没对应左括号,左边第7...
  • Java括号匹配算法题

    2020-04-22 21:45:19
    有效字符串满足:左括号必须同相同类型的右括号闭合:“{}”,"[]","()" 左括号必须以正确的顺序闭合 空字符串可被认为是有效字符串 思路是用栈这个数据结构 遍历字符串时判断:如果是左括号,那么我们将其入栈;...
  • java 括号匹配算法

    2016-01-29 01:16:26
    最累的时候,家人是你最好的归宿。 算法的设计思想: 1. 依次扫描各个符号,凡出现左括弧,则进栈 ... 若栈空,则匹配正确, 否则表明左括号多了 例子中用到的栈是之前博客中用数组实现的栈 pac
  • 下面的代码用于判断一个串中的括号是否匹配 所谓匹配是指不同类型的括号必须左右呼应,可以相互包含,但不能交叉 直接上代码 package myfirstprogram; import java.util.Stack; public class match_kuohao() { ...
  • Java 括号匹配问题

    千次阅读 2013-10-11 16:40:41
    想起了当年学习C++时,遇到的括号匹配的问题,反正一直都没有解决它,都怪自己太懒。今天用java简单的实现了,算是一种补充吧。 public class StackDemo { public static void main(String[] args) { ...
  • import java.util.Scanner; import java.util.Stack; public class BracketMatch { public static void main(String[] args){ //从键盘输入 Scanner in = new Scanner(System.in); Stack stack = new Stack
  • public boolean isValid(String s) { Stack<Character> stack=new Stack(); for (int i = 0; i () ; i++) { char ch=s.charAt(i);...//不匹配情况 } } } if (stack.empty()){//左括号多 return true; } return false; }
  • 括号匹配算法-java实现import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Stack;public class BracketsMatch {public static void main(String[] args) throws Exception {...
  • 括号匹配算法题目来自网络搜集和常考算法,如有侵权请联系我题目描述给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列括号必须以正确的顺序关闭,"()"和"()[]{}"都是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,586
精华内容 634
关键字:

java括号匹配

java 订阅