题目:383.赎金信
给你两个字符串:ransomNote
和 magazine
,判断 ransomNote
能不能由 magazine
里面的字符构成。
如果可以,返回 true
;否则返回 false
。
magazine
中的每个字符只能在 ransomNote
中使用一次。
示例 1:
输入:ransomNote = "a", magazine = "b"
输出:false
示例 2:
输入:ransomNote = "aa", magazine = "ab"
输出:false
示例 3:
输入:ransomNote = "aa", magazine = "aab"
输出:true
提示:
1 <= ransomNote.length, magazine.length <= 105
ransomNote 和 magazine 由小写英文字母组成
代码:
class Solution { public boolean canConstruct(String ransomNote, String magazine) { if(ransomNote.length() > magazine.length()) return false; int[] arr = new int[26]; for(char c : magazine.toCharArray()) { arr[c - 'a'] += 1; } for(char c : ransomNote.toCharArray()) { arr[c - 'a'] -= 1; } for(int i : arr) { if(i < 0) return false; } return true; } }
思考:
这个题并不难,要掌握的是字符串的 toCharArray() 方法,还有很简便的写法。
题目:求差集(学校的作业)
【问题描述】两个集合的差集定义如下:
集合A、B的差集,由所有属于A但不属于B的元素构成。
输入两个集合A、B,每个集合中元素都是自然数。求集合A、B的差集。
【输入形式】
从标准输入接收集合中的自然数元素,以空格分隔。-1表示输入结束。
其中,每个集合都不输入重复的元素。
【输出形式】
输出差运算后集合中的元素,以空格分隔。输出元素的顺序与原有集合A输入的顺序一致。
如果A、B的差集为空集,则不输出任何数值。
【样例输入】
2 8 3 4 -1
6 1 4 9 -1
【样例输出】
2 8 3
【样例说明】从标准输入接收集合中的自然数元素,输出集合A、B的差集。
【评分标准】该题要求输出差运算后集合中的元素,结果完全正确得20分,每个测试点4分。
代码:
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); ArrayList<Integer> listA = new ArrayList<>(); ArrayList<Integer> listB = new ArrayList<>(); // 输入集合A的元素 int num; while ((num = scanner.nextInt()) != -1) { listA.add(num); } // 清除换行符 scanner.nextLine(); // 输入集合B的元素 while ((num = scanner.nextInt()) != -1) { listB.add(num); } // 计算差集 ArrayList<Integer> difference = new ArrayList<>(); for (Integer element : listA) { if (!listB.contains(element)) { difference.add(element); } } // 输出差集 for (Integer element : difference) { System.out.print(element + " "); } scanner.close(); } }
思考:
这道题的输入很关键,要用List来接收不知长度的输入,然后怎么处理的输入很关键。要重点复习学习!
题目: 字符串分割(学校的作业)
【问题描述】
输入两个字符串str和tok。其中tok由若干字符构成,每个字符均可作为一个分隔字符对str进行分隔。
注意:str和tok中均可以包含空格。如果tok含有空格,则空格也作为str的分隔字符。
【输入形式】
控制台分两行输入两个字符串str和tok。
【输出形式】
分行输出str被分隔后的各字符串。
【样例输入】
jfi,dpf.,jfpe&df-jfpf/□□jfoef$djfo□,pe
,. □/&$-
(上例中"□"代表一个空格)
【样例输出】
jfi
dpf
jfpe
df
jfpf
jfoef
djfo
pe
【样例说明】
输入字符串str = "jfi,dpf.,jfpe&df-jfpf/□□jfoef$djfo□,pe",tok = ",. □/&$-",tok中的每一个字符(包括空格)均可作为str的分隔符,输出如上例所示。
代码:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入要分隔的字符串str:"); String str = scanner.nextLine(); System.out.println("请输入分隔符字符串tok:"); String tok = scanner.nextLine(); // 使用正则表达式构建分隔符 String regex = "[" + tok + "]+"; String[] tokens = str.split(regex); // 输出分隔后的各字符串 for (String token : tokens) { System.out.println(token); } scanner.close(); } }
思考:
正则表达式一定要弄明白是怎么回事!!这个题现在还有点不懂!