YTU OJ 3297: Aramic指令碼
阿新 • • 發佈:2018-12-19
題目描述
在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
補充樣例輸出:
1
來源
【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); } }