[程式設計題] 製造迴文

chi633發表於2017-12-21

來源:牛客網2017年校招全國統一模擬筆試(第五場)程式設計題集合

時間限制:1秒 空間限制:32768K

牛牛有一些字母卡片,每張卡片上都有一個小寫字母,所有卡片組成一個字串s。牛牛一直認為迴文這種性質十分優雅,於是牛牛希望用這些卡片拼湊出一些迴文串,但是有以下要求: 1、每張卡片只能使用一次 2、要求構成的迴文串的數量最少 牛牛想知道用這些字母卡片,最少能拼湊出多少個迴文串。 例如: s = "abbaa",輸出1,因為最少可以拼湊出"ababa"這一個迴文串 s = "abc", 輸出3,因為最少只能拼湊出"a","b","c"這三個迴文串 輸入描述: 輸入包括一行,一個字串s,字串s長度length(1 ≤ length ≤ 1000). s中每個字元都是小寫字母

輸出描述: 輸出一個整數,即最少的迴文串個數。

輸入例子1: abc

輸出例子1: 3

分析

這道題需要一點思路。

我們知道迴文串的話,就是前後相等,那麼一個字元至少出現兩次,除了一種情況,就是可以有一個字元只出現一次,就是這個字元在中間。 所以,我們的思路就是統計出現奇數次字元的個數,假設只出現一個奇數次字元,那麼其他都是偶數次的,那麼直接奇數次的放中間就行了,所以至少是一種,如果沒出現更好,也是一種,如果出現兩個奇數次字元,那麼一個拿去放中間,另一個只能單獨領出來作為一個迴文串,所以至少要兩種,如果出現三個奇數次字元,那麼就至少要三種。所以問題就變成統計奇數次字元出現的個數

程式碼

import java.util.*;



public class Main {

	
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		
		String s = in.nextLine();
		
		in.close();
		
		System.out.println(helper(s));
		
	}
	
	private static int helper(String s) {
		int[] count = new int[26];
		int ans = 0;
		for(int i=0;i<s.length();i++) {
			int j = s.charAt(i) - 'a';
			count[j]++;
		}
		
		for(int i=0;i<count.length;i++) {
			if(count[i] % 2 != 0)
				ans++;
		}
		
		return (ans == 0)?1:ans;
	}
}

複製程式碼

相關文章