我正在做 LeetCode 问题,我注意到当我在声明函数之前初始化 Stack 时,我的代码执行得更快:
class Solution {
Stack <Character>myStack = new Stack<Character> ();
public boolean isValid(String s) {
int sLen=s.length();
if (sLen%2!=0)
return false;
// Stack <Character>myStack = new Stack<Character> ();
for(int i=0; i<sLen; i++){
if ((s.charAt(i)==')') && !myStack.empty() && (myStack.peek()=='('))
myStack.pop();
else if (s.charAt(i)==']' && !myStack.empty() && myStack.peek()=='[')
myStack.pop();
else if (s.charAt(i)=='}' && !myStack.empty() && myStack.peek()=='{')
myStack.pop();
else
myStack.push(s.charAt(i));
}
return myStack.empty();
}}
而不是在 boolean 函数中声明它:
class Solution {
//Stack <Character>myStack = new Stack<Character> ();
public boolean isValid(String s) {
int sLen=s.length();
if (sLen%2!=0)
return false;
Stack <Character>myStack = new Stack<Character> ();
for(int i=0; i<sLen; i++){
if ((s.charAt(i)==')') && !myStack.empty() && (myStack.peek()=='('))
myStack.pop();
else if (s.charAt(i)==']' && !myStack.empty() && myStack.peek()=='[')
myStack.pop();
else if (s.charAt(i)=='}' && !myStack.empty() && myStack.peek()=='{')
myStack.pop();
else
myStack.push(s.charAt(i));
}
return myStack.empty();
}}
最佳答案
这是因为在第一个代码段中,您仅初始化 myStack
一次,而在第二个代码段中,您在方法内对其进行初始化,因此每次都会初始化 myStack
调用 isValid
方法的时间。
关于java - 为什么在函数外部初始化堆栈比在函数内部初始化堆栈执行得更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48142405/