此代码可以通过示例,以及我自己想出来的一些例子,感觉都没什么问题,但是提交后,一直都是 40%
,这是为什么啊?
public class Main { private static final String SMALL = "o"; private static final String BIG = "O"; public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); String[] paos = sc.nextLine().split(""); Stack stack = new Stack(); System.out.println(Arrays.toString(paos)); for(int i = 0; i < paos.length; i++) { // 栈顶是 SMALL if(!stack.isEmpty() && (paos[i].equals(Main.SMALL)) && (paos[i].equals(stack.peek()))) { stack.pop(); // 弹出栈顶 stack.push(Main.BIG); // 合并为一个 BIG // 若栈顶的两个元素均为 BIG(可以消除),则循环下去(消除 BIG) while(stack.size() > 1 && stack.get(stack.size() - 2).equals(Main.BIG)) { // 栈中元素至少需要保证 2 个,否则退出 if(stack.size() < 2) break; // 栈顶的两个元素是否为 BIG if(!stack.peek().equals(stack.get(stack.size() - 2))) { break; // 不是,则退出 } // 栈顶的两个元素均为 BIG,可以消除这两个元素 stack.pop(); stack.pop(); } } // 栈顶的元素是 BIG else if(!stack.isEmpty() && (paos[i].equals(Main.BIG)) && (paos[i].equals(stack.peek()))) { stack.pop(); } // 栈顶的元素不与 paos[i] 匹配 else { stack.push(paos[i]); } } //System.out.println(stack); StringBuffer sb = new StringBuffer(); while(!stack.isEmpty()) sb.append(stack.pop()); sb.reverse(); // 逆序 System.out.println(sb.toString()); } }
全部评论
(0) 回帖