嘿伙计,所以我有一个任务,我应该读取用户输入的字符串,并使用堆栈检查平衡符号。因此,如果字符串是“{[()]}”,则字符串是平衡的,因为每个开口都有一个关闭。我的想法是使用一个循环来检查给定字符串中的每个字符,如果字符串有一个开头,如“([{”那么它会执行stack.push(char),如果字符更接近“)] “然后我需要使用stack.pop(char)。我遇到的问题是我的教授强迫我使用字符串方法,我在网上找到的任何帮助都是使用布尔方法,如果有人可以帮助我,我会很感激。
我知道我的代码不起作用,但你至少可以了解我的逻辑是什么。
import java.util。*;
public class BalancedSymbols {
public static String balancedSymbols(String lineToCheck){ //this is the method that im being forced to use
Stack<String> stack = new Stack<String>();
for (int i = 0; i<lineToCheck.length(); i++){
char x = '(';
char y = '{';
char z = '[';
char a;
a = lineToCheck.charAt(i);
if (a == x){
stack.push(a);
}
if (a == y){
stack.push(a);
}
if (a == z){
stack.push(a);
}
}
}
}
显然,除了使用不同的符号外,我会对弹出做同样的事情。
答案 0 :(得分:0)
这是逻辑:
创建空堆栈。 (你已经完成了)。
遍历字符串。
对于您遇到的每个字符ch
,如果ch }])且堆栈为空返回false
其他
如果({[ 推送 堆栈>
如果ch
是)}] 检查 堆栈顶部。
如果stack top等于从堆栈弹出的相应开始括号,则返回false 。
如果您已到达String的结尾且堆栈不为空返回false
其他返回true 。
返回false的原因是我们没有相应的匹配括号。 这些是额外的括号。
首先尝试自己实现它。如果您遇到任何问题,请对其进行评论..我很乐意为您提供帮助。
如果您有任何问题,请发表评论。
答案 1 :(得分:0)
Create empty stack
==========================
private static boolean isValideEx(String str) {
Stack<Character> st=new Stack<Character>();
if(str == null || str.length() == 0)
return true;
for (int i = 0; i < str.length(); i++) {
if(str.charAt(i)==')'){
if(!st.isEmpty() && st.peek()=='('){
st.pop();
}else{
return false;
}
}else if(str.charAt(i)==']'){
if(!st.isEmpty() && st.peek()=='['){
st.pop();
}else{
return false;
}
}else if(str.charAt(i)=='}'){
if(!st.isEmpty() && st.peek()=='{'){
st.pop();
}else{
return false;
}
}else{
st.push(str.charAt(i));
}
}
System.out.println(" sy "+st);
if(st.isEmpty())
return true;
else
return false;
}