【面试题】判断字符串是否匹配一定的模式

import java.util.HashMap;
import java.util.Map;
import java.util.Stack;

public class Mode 
{
	/**
	 * 
	 *  一个字符串只会出现[]{}()六个字符的一个或多个
	 *	现在要判断字符串是否匹配一定的模式
	 *	如果字符串里面的字符是成对出现或者成对并排或者成对嵌套出现,且括号的方向要正确((),[],{}括号这样括起来,才正确),就视为匹配,否则不匹配
	 * 如:
	 *	()、()()、()()()、()[]、(){}[]   都是匹配的(成对出现,括号的方向也正确,可以并排)
	 *	()[{}]、([]{})、[()()]、{[](()([]))}、[()([]{})]  这些也是匹配的,(成对出现,括号的方向也正确,可以并排,可以嵌套)
	 *	(、(()、[(])、()[])、({[)]}),这些都是不匹配(没有成对出现)
	 *	)(、][、}{ ,(][)这些都是不匹配的,(虽然成对出现了,但是括号的方向错了)
	 * @param str
	 * @return
	 */
	public static boolean isMode(String str)
	{
		if(str.length()%2 != 0)
		{
			return false;
		}
		
		Stack<Character> st = new Stack<>();
		
		char[] arr = str.toCharArray();
		
		for(int i=0;i<arr.length;i++)
		{
			if(arr[i] == '(' || arr[i] == '[' || arr[i] == '{')
			{
				st.push(arr[i]);
			}
			else
			{
				if (!st.isEmpty() && st.pop() == reverse(arr[i]))  
				{
					continue;  
				}
                else  
                {
                	return false;  
                }
			}
		}
		
		if (st.isEmpty())  
		{
			 return true;  
		}
        else  
        {
        	 return false;  
        }
	}
	private static char reverse(char s)
	{
		Map<Character, Character> map = new HashMap<>();
		map.put('(',')');
		map.put(')','(');
		map.put('[',']');
		map.put(']','[');
		map.put('{','}');
		map.put('}','{');
		return map.get(s);
	}
	public static void main(String[] args)
	{
		String str = "((()))";
		System.out.println(str + "->" + isMode(str));
	}
	
}

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值