我正在做一个LeetCode问题,我注意到我在初始化一个堆栈之前执行的代码执行得更快,然后声明一个函数运行得更快:
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();
}}
而不是在布尔函数中声明它:
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();
}}
答案 0 :(得分:1)
这是因为在第一个代码段中,您初始化了myStack
一次,而在第二个代码段中,您在方法内初始化它,因此myStack
每次isValid
都会初始化调用方法。