Map就是从key到value的映射。因为重载了[]运算符,Map就像是数组的高级版
反片语
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class 反片语 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
//映射
Map<String,Integer> cnt=new HashMap<String,Integer>();
//动态数组
ArrayList<String> words = new ArrayList<String>();
while(sc.hasNext()){//判断是否在输入
String s=sc.next();
if(s.equals("#"))
break;
words.add(s);//数组添加这个数
String r=repr(s);//进行标准化
if(cnt.containsKey(r)==false)
cnt.put(r,0);//如果之前没有加入过r,这里就进行添加
cnt.put(r,cnt.get(r).intValue()+1);//进行值加一
}
ArrayList<String> ans=new ArrayList<String>();
//进行输出,要判断出现过两次的
for(int i=0;i<words.size();i++){
String temp=words.get(i);//获得在word里面的数组
if(cnt.get(repr(temp)).intValue()==1)
ans.add(temp);
}
Collections.sort(ans);//进行排序
for(int i=0;i<ans.size();i++)
System.out.println(ans.get(i));
}
//讲单词标准化
public static String repr(String s){
String ans=s.toLowerCase();//转换位小写
char[] a=ans.toCharArray();
Arrays.sort(a);//进行排序
ans="";
//进行转换位字符串,如果直接toString会有符号
for(int i=0;i<a.length;i++)
ans=ans+a[i];
return ans;
}
}