2026/4/18 12:10:30
网站建设
项目流程
网页设计的工具有哪些,北京正规seo搜索引擎优化价格,贵阳网站建设费用多少网帮你,军事人才招聘网官网2023岗位表两句话中的不常见单词
问题描述
句子是一串由空格分隔的单词。给定两个句子 s1 和 s2#xff0c;返回所有不常见单词的列表。
不常见单词#xff1a;在两个句子中总共只出现一次#xff0c;且至少出现在一个句子中的单词。
可以按任意顺序返回答案。
示例#xff1a;
输入:…两句话中的不常见单词问题描述句子是一串由空格分隔的单词。给定两个句子s1和s2返回所有不常见单词的列表。不常见单词在两个句子中总共只出现一次且至少出现在一个句子中的单词。可以按任意顺序返回答案。示例输入:s1this apple is sweet,s2this apple is sour输出:[sweet,sour]输入:s1apple apple,s2banana输出:[banana]算法思路哈希表统计频次核心思想将两个句子合并统计每个单词的出现频次出现频次为 1 的单词就是不常见单词代码实现方法一哈希表统计importjava.util.*;classSolution{/** * 找出两句话中的不常见单词 * * param s1 第一个句子 * param s2 第二个句子 * return 所有不常见单词的列表 * * 算法思路 * 1. 将两个句子合并统计单词频次 * 2. 频次为1的单词即为不常见单词 */publicString[]uncommonFromSentences(Strings1,Strings2){// 使用哈希表统计单词频次MapString,IntegerwordCountnewHashMap();// 处理第一个句子String[]words1s1.split( );for(Stringword:words1){wordCount.put(word,wordCount.getOrDefault(word,0)1);}// 处理第二个句子String[]words2s2.split( );for(Stringword:words2){wordCount.put(word,wordCount.getOrDefault(word,0)1);}// 收集频次为1的单词ListStringresultnewArrayList();for(Map.EntryString,Integerentry:wordCount.entrySet()){if(entry.getValue()1){result.add(entry.getKey());}}// 转换为数组返回returnresult.toArray(newString[0]);}}方法二使用Streamimportjava.util.*;importjava.util.stream.*;classSolution{/** * 使用Stream */publicString[]uncommonFromSentences(Strings1,Strings2){// 合并两个句子的所有单词String[]allWords(s1 s2).split( );// 统计频次并过滤频次为1的单词MapString,LongwordCountArrays.stream(allWords).collect(Collectors.groupingBy(word-word,Collectors.counting()));// 返回频次为1的单词数组returnwordCount.entrySet().stream().filter(entry-entry.getValue()1).map(Map.Entry::getKey).toArray(String[]::new);}}算法分析时间复杂度O(m n)m 和 n 分别是两个句子的长度分割字符串O(m n)哈希表操作每个单词 O(1)总共 O(m n)构建结果O(k)其中 k 是不同单词的数量空间复杂度O(m n)哈希表存储所有不同单词O(m n)结果数组O(k) ≤ O(m n)算法过程1s1 “this apple is sweet”, s2 “this apple is sour”单词统计s1单词: [this, apple, is, sweet] s2单词: [this, apple, is, sour] 哈希表统计: - this: 2 - apple: 2 - is: 2 - sweet: 1 - sour: 1 频次为1的单词: [sweet, sour]2s1 “apple apple”, s2 “banana”单词统计s1单词: [apple, apple] s2单词: [banana] 哈希表统计: - apple: 2 - banana: 1 频次为1的单词: [banana]3s1 “abcd def abcd”, s2 “def mnop mnop”单词统计哈希表统计: - abcd: 2 - def: 2 - mnop: 2 频次为1的单词: [] (空数组)测试用例importjava.util.*;publicclassTest{publicstaticvoidmain(String[]args){SolutionsolutionnewSolution();// 测试用例1标准示例Strings1_1this apple is sweet;Strings2_1this apple is sour;String[]result1solution.uncommonFromSentences(s1_1,s2_1);System.out.println(Test 1: Arrays.toString(result1));// [sweet, sour]// 测试用例2重复单词Strings1_2apple apple;Strings2_2banana;String[]result2solution.uncommonFromSentences(s1_2,s2_2);System.out.println(Test 2: Arrays.toString(result2));// [banana]// 测试用例3无结果Strings1_3abcd def abcd;Strings2_3def mnop mnop;String[]result3solution.uncommonFromSentences(s1_3,s2_3);System.out.println(Test 3: Arrays.toString(result3));// []// 测试用例4单个单词Strings1_4hello;Strings2_4world;String[]result4solution.uncommonFromSentences(s1_4,s2_4);System.out.println(Test 4: Arrays.toString(result4));// [hello, world]// 测试用例5一个句子为空Strings1_5;Strings2_5hello world;String[]result5solution.uncommonFromSentences(s1_5,s2_5);System.out.println(Test 5: Arrays.toString(result5));// [hello, world]// 测试用例6两个句子相同Strings1_6same words here;Strings2_6same words here;String[]result6solution.uncommonFromSentences(s1_6,s2_6);System.out.println(Test 6: Arrays.toString(result6));// []// 测试用例7包含数字和特殊字符Strings1_7hello123 world!;Strings2_7hello123 test;String[]result7solution.uncommonFromSentences(s1_7,s2_7);System.out.println(Test 7: Arrays.toString(result7));// [world!, test]// 测试用例8大量重复Strings1_8a a a a a;Strings2_8b b b b b;String[]result8solution.uncommonFromSentences(s1_8,s2_8);System.out.println(Test 8: Arrays.toString(result8));// []// 测试用例9一个单词在两个句子中各出现一次Strings1_9unique;Strings2_9unique;String[]result9solution.uncommonFromSentences(s1_9,s2_9);System.out.println(Test 9: Arrays.toString(result9));// []// 测试用例10混合大小写Strings1_10Hello hello;Strings2_10WORLD world;String[]result10solution.uncommonFromSentences(s1_10,s2_10);System.out.println(Test 10: Arrays.toString(result10));// [Hello, hello, WORLD, world]}}关键点问题不常见单词 在两个句子中总共出现1次不是在各自句子中只出现1次而是在合并后只出现1次字符串分割使用split( )处理空格分隔常见问题为什么不用SetSet只能判断存在性无法统计频次需要知道单词出现了多少次而不仅仅是是否出现