每个输入包含 1 个测试用例。每个测试用例的第 i 行,表示完成第 i 件料理需要哪些材料,各个材料用空格隔开,输入只包含大写英文字母和空格,输入文件不超过 50 行,每一行不超过 50 个字符。
输出一行一个数字表示完成所有料理需要多少种不同的材料。
BUTTER FLOUR HONEY FLOUR EGG
4
import java.util.*; public class Main { public static void main(String[] args) { HashSet<String> set = new HashSet<>(); Scanner in = new Scanner(System.in); while (in.hasNextLine()) { String str = in.nextLine(); String[] s = str.split(" "); for(String x :s){ set.add(x); } } System.out.print(set.size()); } }
import java.util.Scanner; import java.util.HashSet; import java.util.Set; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); Set<String> hs = new HashSet<>(); while(sc.hasNext()){ String[] strs = sc.nextLine().split(" "); for(int i=0;i<strs.length;i++){ hs.add(strs[i]); } } System.out.println(hs.size()); } }
这个编译环境 要手动导包, 值得注意的一点:scanner对象的.next()可以完美规避掉空格和换行的差异 import java.util.HashSet; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); HashSet<String> set = new HashSet<String>(); while(in.hasNext()){ String str = in.next(); set.add(str); } System.out.println(set.size()); set.clear(); } }
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
StringBuffer sb=new StringBuffer();
while(sc.hasNext()) {
sb.append(sc.next()+" ");
}
sc.close();
String[] strs=sb.toString().split(" ");
TreeSet<String> ts=new TreeSet<String>();
for(int i=0;i<strs.length;i++) {
ts.add(strs[i]);
}
System.out.println(ts.size());
}
TreeSet元素不可重复
import java.util.Scanner; import java.util.ArrayList; import java.util.List; public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); List<String> list = new ArrayList<>(); while (scanner.hasNextLine()) { String line = scanner.nextLine(); String[] s = line.split(" "); map(s, list); } System.out.println(list.size()); } public static void map(String[] s, List list) { for (String str : s) { if (list.contains(str)) { continue; } list.add(str); } } }
首先想到的数据数组一个一个比对发现效率很慢, 后来想了一下通过HashMap或者HashSet方式存储,原因:1.这两个集合类不允许存储重复元素; 2.这个集合元素采用Hash算法来快速的定位元素位置,就能够快速的进行元素比对,以提高效率 1. import java.util.HashSet; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); HashSet<String> set = new HashSet<String>(); while(in.hasNext()) { String str = in.nextLine(); String[] foots = str.split(" "); for(String foot : foots) { set.add(foot); } } System.out.println(set.size()); set.clear(); } }
import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); Set<String> set = new HashSet<>(); while (in.hasNext()) { String[] strings = in.nextLine().split("\\s"); Collections.addAll(set, strings); } System.out.println(set.size()); } }
import java.util.LinkedList; import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner scanner = new Scanner(System.in); LinkedList<String> strings = new LinkedList<>(); while (scanner.hasNext()) { String[] foods = scanner.nextLine().split(" "); for (int i = 0; i < foods.length; i++) { if (!strings.contains(foods[i])) { strings.add(foods[i]); } } } System.out.println(strings.size()); } }这道题我觉得选择什么样的数据结构来存储字符串是非常重要的,就是要去掉重复的字符串,然后求出来一个用例中所有不相同的字符串的个数,也就是去掉重复字符串之后的数据结构的size
本题有一个难点,就是输入的行数不确定,也就是键盘输入几行就是几行,因此我们需要使用Scanner.class.hasNext()方法进行判断,该方法返回boolean类型的值,当键盘手动输入结束时才会返回false,window环境下使用ctrl+z结束输入循环,linux环境下使用ctrl+d结束输入循环。
import java.util.HashSet; import java.util.Scanner; public class Main { //下厨房 public static void main(String[] args) { Scanner in = new Scanner(System.in); HashSet<String> set = new HashSet<String>(); while(in.hasNext()){ String str = in.nextLine(); String arr[] = str.split(" "); for(int i=0; i<arr.length; i++){ set.add(arr[i]); } } System.out.println(set.size()); set.clear(); } }
java直接把每个单词取出来,用hashset即可了……
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String input=""; HashSet records=new HashSet();
while(scanner.hasNext())
{
input=scanner.nextLine();
String[] strings=input.split(" ");
for(String string:strings)
records.add(string);
}
System.out.println(records.size());
}
}