這是在杭電上做一道水題時發現的,挺不錯,寫下了分享一下
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);elseSystem.out.println(hs.size());hs.clear();}}
}