214. Shortest Palindrome

선택한 UI 언어에 맞게 문제 텍스트를 러시아어에서 번역합니다. 코드는 변경하지 않습니다.

Дана 문자열 s. Вы можете преобразовать s в палиндром, добавив символы в начало строки.

return самый короткий палиндром, который можно получить, выполняя это преобразование.

예제:

Input: s = "aacecaaa"

Output: "aaacecaaa"

C# 해법

매칭됨/원본
public class Solution {
    public string ShortestPalindrome(string s) {
        int n = s.Length;
        char[] revArray = s.ToCharArray();
        Array.Reverse(revArray);
        string rev = new string(revArray);
        for (int i = 0; i < n; i++) {
            if (s.Substring(0, n - i) == rev.Substring(i)) {
                return rev.Substring(0, i) + s;
            }
        }
        return "";
    }
}

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 string ShortestPalindrome(string s) {
        int n = s.size();
        char[] revArray = s.ToCharArray();
        Array.Reverse(revArray);
        string rev = new string(revArray);
        for (int i = 0; i < n; i++) {
            if (s.Substring(0, n - i) == rev.Substring(i)) {
                return rev.Substring(0, i) + s;
            }
        }
        return "";
    }
}

Java 해법

매칭됨/원본
class Solution {
    public String shortestPalindrome(String s) {
        int n = s.length();
        String rev = new StringBuilder(s).reverse().toString();
        for (int i = 0; i < n; i++) {
            if (s.substring(0, n - i).equals(rev.substring(i))) return (
                rev.substring(0, i) + s
            );
        }
        return "";
    }
}

JavaScript 해법

매칭됨/원본
class Solution {
    shortestPalindrome(s) {
        const n = s.length;
        const rev = s.split('').reverse().join('');
        for (let i = 0; i < n; i++) {
            if (s.substring(0, n - i) === rev.substring(i)) {
                return rev.substring(0, i) + s;
            }
        }
        return "";
    }
}

Python 해법

매칭됨/원본
class Solution:
    def shortestPalindrome(self, s: str) -> str:
        n = len(s)
        rev = s[::-1]
        for i in range(n):
            if s[: n - i] == rev[i:]:
                return rev[:i] + s
        return ""

Go 해법

매칭됨/원본
package main

import (
  "fmt"
  "strings"
)

func shortestPalindrome(s string) string {
  n := len(s)
  rev := reverseString(s)
  for i := 0; i < n; i++ {
    if s[:n-i] == rev[i:] {
      return rev[:i] + s
    }
  }
  return ""
}

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

1️⃣

Создание обратной строки:

Создайте обратную строку rev от исходной строки s, чтобы использовать её для сравнения.

2️⃣

Итерация для поиска наибольшего палиндрома:

Перебирайте индекс i от 0 до size(s) - 1.

Для каждой итерации проверяйте, равна ли substring s от начала до n - i подстроке rev от i до конца строки.

Если 문제 설명 выполняется, это означает, что substring s от начала до n - i является палиндромом, так как rev является обратной строкой s.

3️⃣

Возврат результата:

Как только найден наибольший палиндром, возвращайте строку, состоящую из обратной подстроки rev от начала до i + исходная 문자열 s.

😎

Vacancies for this task

활성 채용 with overlapping task tags are 표시됨.

전체 채용
아직 활성 채용이 없습니다.