要编写用于检查 Java 程序中的大括号、方括号和圆括号是否正确匹配的算法,可以使用堆栈数据结构来跟踪代码中遇到的左大括号。例如,您可以使用以下步骤:
初始化空堆栈。
循环遍历 Java 程序中的字符,从第一个字符开始。
如果当前字符是左大括号(即、、或),则将其推送到堆栈上。{[(
如果当前字符是右大括号(即、或),则从堆栈中d出顶部元素。如果d出的元素与当前右大括号不匹配,则返回(指示大括号未正确匹配)。}])False
重复步骤 3 和 4,直到到达 Java 程序的末尾。
如果堆栈为空,则返回(指示大括号正确匹配)。否则,返回(表示大括号未正确匹配)。TrueFalse
此算法使用堆栈来跟踪 Java 程序中遇到的左大括号,并通过将右大括号与从堆栈中d出的相应左大括号进行比较来检查是否匹配。此方法可以处理大括号的任意嵌套结构,并将正确识别 Java 程序中的大括号是否正确匹配。
请注意,这只是一个示例算法,可能还有其他方法可以解决此问题。您可以尝试不同的方法来找到最适合您的解决方案。
java栈实现括号匹配,主要是使用栈队列算法,如下代码:
import java.util.Scannerimport java.util.Stack
/**
* @author Owner
*
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in)
int n= sc.nextInt()//3条测试数据数据
Stack<Character> stack = null
while(n!=0){
//从控制台读入一个测试字符串[]() [(])
String str = sc.next()
//如果该输入字符串为奇数,说明不匹配
if(str.length() % 2 == 1){
System.out.println("No")
}else{
//说明字符是偶数
stack = new Stack<Character>()
//遍历第一条测试字符串[]() [(])
for(int i=0i<str.length()i++){
if(stack.isEmpty()){
//如果栈是空的
stack.push(str.charAt(i))
}else if(stack.peek() == '[' && str.charAt(i) == ']' || stack.peek() == '(' && str.charAt(i) == ')'){
//说明此时栈中字符不是空的,并且符合,
stack.pop()
}else{
stack.push(str.charAt(i))
}
}
if(stack.isEmpty()){
//如果栈是空的,说明括号匹配
System.out.println("Yes")
}else{
//说明栈不为空,括号不匹配
System.out.println("No")
}
}
n--
}
}
}
java-- 匹配{[()]}
import java.util.ArrayListimport java.util.HashMap
import java.util.List
import java.util.Map
public class Test{
//匹配()[]{}
public static boolean check(String expr){
if(expr==null || "".equals(expr)) return true
List<String> list=new ArrayList<String>()
Map<String,String>map=new HashMap<String,String>()
map.put("(", ")")
map.put("[", "]")
map.put("{", "}")
for(int i=0i<expr.length()i++){
String ch=expr.charAt(i)+""
if(map.keySet().contains(ch)){
list.add(ch)
}else if(map.values().contains(ch)){
if(list.isEmpty() || !ch.equals(map.get(list.get(list.size()-1)))){
return false
}else{
list.remove(list.size()-1)
}
}
}
return list.isEmpty()
}
public static void main(String[] args) {
System.out.println(check("{([])}"))
System.out.println(check("{a(b[c{e}f(s)])}"))
System.out.println(check("{([]]]])}"))
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)