1.タイトル
2.私の最初の考えと問題
1.アイデアを書く前にいくつかの知識ポイントを要約します。
(1)文字列sの場合、文字を取得
するs.length()
メソッドで長さを
char c = s.charAt(i);
取得します。iは0から始まるインデックスです。
(2)スタック
作成の場合:Stack<Character> stack = new Stack<>();
、パッケージクラスCharacterに注意してください。 、for charスタックに
プッシュstack.push(c);
:スタックからポップアウト:stack.pop();
空であると判断し、スタックの最上位要素を判断します:
if(!stack.isEmpty() && stack.peek()== ‘(’){...}
2.アイデア
(1)文字列の長さは2倍の数値、つまりs.length()%2 == 0である必要があります。そうでない場合、直接falseが返されます。
(2)文字cが([{ This 3つのシンボル、スタックを実行しますpush(c)
(3)cが3種類の右括弧の場合、それらについて個別に説明します。スタックが空であるかどうか、およびスタックの一番上のpeek()が対応する左括弧であるかどうかを確認します。空の場合は、ポップします。スタック、それ以外の場合はfalseを返します。
3.私が書いたコードを実行した後の問題:
(1)c == '('を二重引用符として記述します。cはcharタイプであることに注意してください。単一引用符を使用し、文字列には二重引用符を使用する必要があります。これに注意してください、注意しないでください。無視するのは簡単です。
(2)コードを書いた後、それを忘れてreturn stack.isEmpty()
、自己検査の後に見つけます。トラバーサルの後、空のスタックが実行され、有効な括弧は空のスタックです。
3.問題解決方法1:スタック
自分で書いたコードに直接:
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
//字符串包含的字符数能被2整除
if(s.length() % 2 == 0){
for(int i = 0;i < s.length();i++){
char c = s.charAt(i);
if(c == '(' || c== '[' || c == '{'){
//入栈
stack.push(c);
}else if(c == ')'){
if(!stack.isEmpty() && stack.peek() == '('){
stack.pop();
}else{
return false;
}
}else if(c == ']'){
if(!stack.isEmpty() && stack.peek() == '['){
stack.pop();
}else{
return false;
}
}else{
if(!stack.isEmpty() && stack.peek() == '{'){
stack.pop();
}else{
return false;
}
}
}
//这一句不要忘记,一开始漏掉了
return stack.isEmpty();
}
return false;
}
}
公式の問題解決策は、スタック内のHashMapを使用します。問題解決策は、私が作成したものと似ていますが、データストレージの形式が異なります。公式コードも次のように記述されています。
class Solution {
public boolean isValid(String s) {
int n = s.length();
if (n % 2 == 1) {
return false;
}
Map<Character, Character> pairs = new HashMap<Character, Character>() {
{
put(')', '(');
put(']', '[');
put('}', '{');
}};
Deque<Character> stack = new LinkedList<Character>();
for (int i = 0; i < n; i++) {
char ch = s.charAt(i);
if (pairs.containsKey(ch)) {
if (stack.isEmpty() || stack.peek() != pairs.get(ch)) {
return false;
}
stack.pop();
} else {
stack.push(ch);
}
}
return stack.isEmpty();
}
}