判断栈操作序列是否合法:Java算法实现
假设以'I'和'O'分别表示进栈和出栈操作,栈的初态和终态均为空,进栈和出栈的操作序列str可表示为仅由'I'和'O'组成的字符串。设计一个算法判定str是否合法。
下面是一个用Java编写的算法来判断进栈和出栈操作序列是否合法:
import java.util.Stack;
public class StackOperations {
public static boolean isLegal(String str) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == 'I') {
stack.push(c);
} else if (c == 'O') {
if (stack.isEmpty()) {
return false;
}
stack.pop();
} else {
return false;
}
}
return stack.isEmpty();
}
public static void main(String[] args) {
String str = "IIIOIOIOO";
System.out.println(isLegal(str)); // 输出:true
}
}
该算法使用了一个栈来模拟进栈和出栈操作。遍历操作序列字符串,如果字符为'I',则将其进栈;如果字符为'O',则判断栈是否为空,如果为空则返回false,否则进行出栈操作;如果字符既不是'I'也不是'O',则返回false。遍历结束后,判断栈是否为空,如果为空则返回true,否则返回false。
上述代码的输出是true,表示给定的操作序列"IIIOIOIOO"是合法的。
原文地址: https://www.cveoy.top/t/topic/pjbZ 著作权归作者所有。请勿转载和采集!