牛牛有一些字母卡片,每张卡片上都有一个小写字母,所有卡片组成一个字符串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); } }