1332. Remove Palindromic Subsequences

LeetCode easy original: C# #array #csharp #easy #leetcode #string
選択した UI 言語に合わせて問題文をロシア語から翻訳します。コードは変更しません。

Вам дана 文字列 s, состоящая только из букв 'a' и 'b'. За один шаг вы можете удалить одну палиндромную subsequence из s.

return минимальное количество шагов, чтобы сделать данную строку пустой.

文字列 является subsequenceю данной строки, если она создается путем удаления некоторых символов из данной строки без изменения их порядка. Обратите внимание, что subsequence не обязательно должна быть непрерывной.

文字列 называется палиндромом, если она читается одинаково как вперед, так и назад.

例:

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++ 解法

自動ドラフト、提出前に確認
#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 解法

自動ドラフト、提出前に確認
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 уже является палиндромом, return 1, так как можно удалить всю строку за один шаг.

Если 文字列 s не является палиндромом, return 2. В этом случае можно удалить все символы 'a' за один шаг, а затем все символы 'b' за второй шаг (или наоборот).

Таким образом, минимум шагов для опустошения строки всегда будет либо 1, либо 2, в зависимости от того, является ли 文字列 палиндромом.

😎

Vacancies for this task

有効な求人 with overlapping task tags are 表示.

すべての求人
有効な求人はまだありません。