План курса / Все задачи / Алгоритмы и структуры данных
Палиндром из строки
легко
# решено
Дана строка s. Нужно определить размер самого длинного палиндрома, который можно составить из её символов.
Палиндром — это слово, которое читается слева направо и справа налево одинаково.
Реши задачу так, как будто ты не знаешь, сколько именно различных символов в строке и какие они, но точно знаешь, что их меньше 128.
Пример 1:
Ввод: s = "aaabbbccccdd"
Вывод: 11
Объяснение: "dccbaaabccd" один из примеров палиндрома
Пример 2:
Ввод: s = "abc"
Вывод: 1
Объяснение: палиндромом могут быть строки "a" или "b" или "c"
Ограничения:
len(s) >= 0
s содержит только ascii символы
using System;
using System.Collections.Generic;
public class Solution {
public static int FindPalindromeLength(string s) {
int result = 0;
HashSet<char> chars = new HashSet<char>();
foreach (char ch in s) {
if (chars.Contains(ch)) {
chars.Remove(ch);
result += 2;
} else {
chars.Add(ch);
}
}
return result + (chars.Count > 0 ? 1 : 0);
}
}
#include <string>
#include <unordered_set>
using namespace std;
int findPalindromeLength(const string& s) {
int result = 0;
unordered_set<char> chars;
for (char ch : s) {
if (chars.count(ch)) {
chars.erase(ch);
result += 2;
} else {
chars.insert(ch);
}
}
return result + (chars.empty() ? 0 : 1);
}
package main
func findPalindromeLength(s string) int {
result := 0
chars := make(map[rune]bool)
for _, ch := range s {
if chars[ch] {
delete(chars, ch)
result += 2
} else {
chars[ch] = true
}
}
if len(chars) > 0 {
return result + 1
}
return result
}
import java.util.HashSet;
import java.util.Set;
public class Solution {
public int findPalindromeLength(String s) {
int result = 0;
Set<Character> chars = new HashSet<>();
for (char ch : s.toCharArray()) {
if (chars.contains(ch)) {
chars.remove(ch);
result += 2;
} else {
chars.add(ch);
}
}
return result + (chars.isEmpty() ? 0 : 1);
}
}
from typing import *
def find_palindrome_length(s: str) -> int:
result = 0
chars = set()
for ch in s:
if ch in chars:
chars.remove(ch)
result += 2
else:
chars.add(ch)
return result + min(1, len(chars))
/**
* @param {string} s
* @returns {number}
*/
export function findPalindromeLength(s) {
let result = 0;
const chars = new Set();
for (const ch of s) {
if (chars.has(ch)) {
chars.delete(ch);
result += 2;
} else {
chars.add(ch);
}
}
return result + (chars.size > 0 ? 1 : 0);
}