1. 程式人生 > >YTU OJ 3297: Aramic指令碼

YTU OJ 3297: Aramic指令碼

題目描述

在Aramic語言中,單詞只能代表物件
Aramic中的單詞有以下特殊屬性:
1. 如果一個單詞不包含相同的字母,則該單詞是根。
2. 一個根和他的所有排列表示一個單詞
3. 例如 :“aaaa” , “aaa” ,”aa” 的根為”a”   “aabb”,”abab”,”baabb” 的根為”ab”
問指令碼中提到的不同物件的數量是多少?

輸入

第一行為一個整數 n (1<=n <= 1000)。
第二行為n個單詞,每個單詞的長度不超過1000。 保證輸入的單詞由小寫字母組成

輸出

輸出一個整數,給定古代Aramic指令碼中提到的不同物件的數量。

樣例輸入

5
a  aa  aaa  ab  abb

樣例輸出

2

提示

補充樣例輸入: 

3

amer arem mrea

補充樣例輸出: 

來源

【AC程式碼】:

import java.util.*;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int ans = 0;// 結果計數
		Map<String, Integer> map = new HashMap<String, Integer>();
		while (n > 0) {
			String s = sc.next();
			char s1[] = new char[s.length()];
			for (int i = 0; i < s.length(); i++)
				s1[i] = s.charAt(i);
			int v[] = new int[28];// 標記26個字母出現個數(主要是用來判斷是否出現過)
			for (int i = 0; i < s.length(); i++)
				v[s1[i] - 'a']++;
			String ss = "";
			for (int i = 0; i < 26; i++)
				if (v[i] != 0)// 若出現過此字母則在新的字母序列上新增此字母
					ss += (char) ('a' + i);
			if (!map.containsKey(ss)) {//map中是否有此字母序列
				map.put(ss, 1);//沒有此字母序列則設為1
				ans++;
			}
			n--;
		}
		System.out.println(ans);
	}
}