1003. Check If Word Is Valid After Substitutions
Дана 文字列 s, определите, является ли она допустимой. 文字列 s допустима, если, начиная с пустой строки t = "", вы можете преобразовать t в s, выполнив следующую операцию любое количество раз: вставить строку "abc" в любую позицию в t. Более формально, t становится tleft + "abc" + tright, где t == tleft + tright. Обратите внимание, что tleft и tright могут быть пустыми. return true, если s - допустимая 文字列, иначе return false.
例:
Input: s = "aabcbc"
Output: true
C# 解法
照合済み/オリジナルpublic class Solution {
public bool IsValid(string s) {
if (s.Length % 3 != 0) return false;
Stack<char> stack = new Stack<char>();
foreach (char ch in s) {
if (ch == 'c') {
if (stack.Count < 2 || stack.Pop() != 'b' || stack.Pop() != 'a') {
return false;
}
} else {
stack.Push(ch);
}
}
return stack.Count == 0;
}
}
C++ 解法
自動ドラフト、提出前に確認#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public bool IsValid(string s) {
if (s.size() % 3 != 0) return false;
stack<char> stack = new stack<char>();
foreach (char ch in s) {
if (ch == 'c') {
if (stack.size() < 2 || stack.pop() != 'b' || stack.pop() != 'a') {
return false;
}
} else {
stack.push(ch);
}
}
return stack.size() == 0;
}
}
Java 解法
照合済み/オリジナルpublic class Solution {
public boolean isValid(String s) {
if (s.length() % 3 != 0) return false;
Stack<Character> stack = new Stack<>();
for (char ch : s.toCharArray()) {
if (ch == 'c') {
if (stack.size() < 2 || stack.pop() != 'b' || stack.pop() != 'a') {
return false;
}
} else {
stack.push(ch);
}
}
return stack.isEmpty();
}
}
JavaScript 解法
照合済み/オリジナルclass Solution {
isValid(s) {
if (s.length % 3 !== 0) return false;
const stack = [];
for (const char of s) {
if (char === 'c') {
if (stack.length < 2 || stack.pop() !== 'b' || stack.pop() !== 'a') {
return false;
}
} else {
stack.push(char);
}
}
return stack.length === 0;
}
}
Algorithm
Проверка допустимости длины строки:
Проверьте, что длина строки s кратна 3. Если нет, return false.
Использование стека для проверки:
Инициализируйте пустой стек. Проходите по каждому символу строки s.
Если текущий символ является 'c', проверьте, что два предыдущих символа в стеке - это 'b' и 'a' соответственно. Если это так, удалите 'b' и 'a' из стека. Если нет, return false.
Если текущий символ не 'c', добавьте его в стек.
Проверка остатка стека:
В конце, если стек пуст, return true. Иначе return false.
😎
Vacancies for this task
有効な求人 with overlapping task tags are 表示.