每个输入包含 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());
}
}