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));
}
}
【面试题】判断字符串是否匹配一定的模式
最新推荐文章于 2022-10-31 21:42:34 发布