这是在杭电上做一道水题时发现的,挺不错,写下了分享一下
http://acm.hdu.edu.cn/showproblem.php?pid=2072
这里我用了两种方法,参考大佬的,一个是list实现类,一个是用set框架
import java.util.*; public class Main { public static void main(String args[]) { Scanner sc=new Scanner(System.in); while(sc.hasNext()){ int ans=0; boolean bre = false; String s=sc.nextLine(); String b[]=s.split(" "); for(int i=0;i<b.length;i++) if(b[i].contains("#")) bre=true; if(bre)break; List list=new ArrayList(); for(int i=0;i<b.length;i++) { if(!list.contains(b[i])) list.add(b[i]); } if(list.contains("")){ System.out.println(list.size()-1); } else System.out.println(list.size()); } } }
List list=new ArrayList();List是一个接口
这种方法比较常规,将字符串用“ ”分割,将每部分放在一个数组里边,然后通过判断是否重复,保存在List里边,最后通过判断list里边大小来输出结果,这里要注意的是字符串开头可能是“ ”,List无法识别,会记录大小的,所以要注意list.size()-1;
第二种方法:
_集合框架(HashSet存储字符串并遍历)
我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比较, 效率较低,哈希算法提高了去重复的效率, 降低了使用equals()方法的次数,当HashSet调用add()方法存储对象的时候, 先调用对象的hashCode()方法得到一个哈希值, 然后在集合中查找是否有哈希值相同的对象 ,如果没有哈希值相同的对象就直接存入集合,如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equals()比较,比较结果为false就存入, true则不存。就这题而言,就是重复的不存
代码如下:
import java.util.*; public class Main { public static void main(String args[]) { Scanner sc=new Scanner(System.in); while(sc.hasNext()){ HashSet<String> hs=new HashSet<String>(); String s=sc.nextLine(); if(s.equals("#"))break; String b[]=s.split(" +"); for(int i=0;i<b.length;i++) hs.add(b[i]); if(hs.isEmpty()){ System.out.println("0"); continue; } int c=0; if(s.charAt(0)==' ') System.out.println(hs.size()-1); else System.out.println(hs.size()); hs.clear(); } } }