牛牛有一些字母卡片,每张卡片上都有一个小写字母,所有卡片组成一个字符串s。牛牛一直认为回文这种性质十分优雅,于是牛牛希望用这些卡片拼凑出一些回文串,但是有以下要求:
1、每张卡片只能使用一次
2、要求构成的回文串的数量最少
牛牛想知道用这些字母卡片,最少能拼凑出多少个回文串。
例如: s = "abbaa",输出1,因为最少可以拼凑出"ababa"这一个回文串
s = "abc", 输出3,因为最少只能拼凑出"a","b","c"这三个回文串
输入包括一行,一个字符串s,字符串s长度length(1 ≤ length ≤ 1000). s中每个字符都是小写字母
输出一个整数,即最少的回文串个数。
abc
3
#include <iostream>
#include <vector>
using namespace std;
int main() {
string str;
cin >> str;
vector<int> v(26, 0);
for (char c : str)
v[c - 'a']++;
int odd = 0;
for (int n : v)
if (n % 2 == 1)
odd++;
cout << odd << endl;
} //偶数可以任意结合,奇数一个就是一个
let lie = readline()
let solve = {}
for(let i = 0;i<lie.length;i++){
if(solve[lie.charAt(i)]){
solve[lie.charAt(i)]++
}else{
solve[lie.charAt(i)]=1
}
}
let cnt = 0
for(let key of Object.keys(solve)){
if(solve[key]%2) cnt++
}
if(cnt==0) cnt=1
console.log(cnt) import java.util.Scanner;
import java.util.HashMap;
public class Main
{
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
String inputString = scanner.next();
HashMap<Character, Integer> countMap = new HashMap<>();
for (int i = 0; i < inputString.length(); i++)
{
char ch = inputString.charAt(i);
if (!countMap.containsKey(ch))
{
countMap.put(ch, 0);
}
countMap.put(ch, countMap.get(ch) + 1);
}
int result = 0;
boolean evenAdded = false;
boolean oddAdded = false;
for (Character key : countMap.keySet())
{
int value = countMap.get(key);
if ((value & 1) == 0 && !evenAdded)
{
result += 1;
evenAdded = true;
}
if ((value & 1) == 1)
{
result += 1;
oddAdded = true;
}
}
if (evenAdded && oddAdded) result -= 1;
System.out.println(result);
}
}