题目描述
在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);
}
}