1332. Remove Palindromic Subsequences
Вам дана строка s, состоящая только из букв 'a' и 'b'. За один шаг вы можете удалить одну палиндромную подпоследовательность из s.
Верните минимальное количество шагов, чтобы сделать данную строку пустой.
Строка является подпоследовательностью данной строки, если она создается путем удаления некоторых символов из данной строки без изменения их порядка. Обратите внимание, что подпоследовательность не обязательно должна быть непрерывной.
Строка называется палиндромом, если она читается одинаково как вперед, так и назад.
Пример:
Input: s = "ababa"
Output: 1
Explanation: s is already a palindrome, so its entirety can be removed in a single step.
C# решение
сопоставлено/оригиналpublic class Solution {
public int RemovePalindromeSub(string s) {
if (string.IsNullOrEmpty(s)) {
return 0;
}
if (new string(s.Reverse().ToArray()) == s) {
return 1;
}
return 2;
}
}
C++ решение
auto-draft, проверить перед отправкой#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 int RemovePalindromeSub(string s) {
if (string.IsNullOrEmpty(s)) {
return 0;
}
if (new string(s.Reverse().ToArray()) == s) {
return 1;
}
return 2;
}
}
Java решение
auto-draft, проверить перед отправкойimport java.util.*;
import java.math.*;
// Auto-generated Java draft from the C# solution. Review API differences before LeetCode submit.
public class Solution {
public int RemovePalindromeSub(String s) {
if (String.IsNullOrEmpty(s)) {
return 0;
}
if (new String(s.Reverse().ToArray()) == s) {
return 1;
}
return 2;
}
}
Python решение
сопоставлено/оригиналclass Solution:
def removePalindromeSub(self, s: str) -> int:
if not s:
return 0
if s == s[::-1]:
return 1
return 2
Go решение
сопоставлено/оригиналfunc removePalindromeSub(s string) int {
if len(s) == 0 {
return 0
}
reversedString := reverseString(s)
if reversedString == s {
return 1
}
return 2
}
func reverseString(s string) string {
runes := []rune(s)
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
runes[i], runes[j] = runes[j], runes[i]
}
return string(runes)
}
Algorithm
Если строка s уже является палиндромом, верните 1, так как можно удалить всю строку за один шаг.
Если строка s не является палиндромом, верните 2. В этом случае можно удалить все символы 'a' за один шаг, а затем все символы 'b' за второй шаг (или наоборот).
Таким образом, минимум шагов для опустошения строки всегда будет либо 1, либо 2, в зависимости от того, является ли строка палиндромом.
😎
Вакансии для этой задачи
Показаны активные вакансии с пересечением по тегам задачи.