基本算法思维——WEB输入内容相似性检测应用

问题:

小B所在的团队正在开发一个WEB输入内容相似性检测应用,她想到的一种方法是统计用户输入内容中不同单词的出现频率,据此建立一个向量表示用户输入的内容。用户输入的内容已经经过过滤处理,只剩下单词和空格,没有标点符号。各个单词出现频率按从小到大的顺序排列后,即构成了用户输入内容的向量表示。由于用户输入的内容可能很长,单靠人力完全无法找出来。因此小B希望你能帮忙编写一个程序,输出用户内容的向量表达


分析:使用特定数据结构记录重复key

(1)使用HashMap记录重复key,存取效率高,方便。且map可以单独获取key或value的集合。

(2)使用String的字符串分割方法

code:

 1 import java.util.Arrays;
 2 import java.util.HashMap;
 3 import java.util.Map;
 4 import java.util.Scanner;
 5 
 6 public class Main {
 7 
 8     public static void main(String[] args) {
 9         Scanner s = new Scanner(System.in);
10         while(s.hasNext()) {
11             String str = s.nextLine();
12             String[] temp = str.split(" ");
13             Map<String,Integer> map = new HashMap<String,Integer>();
14             /*
15             for(int i=0;i<temp.length;i++) {
16                 Integer count = map.get(temp[i]);
17                 if(count==null || count ==0) {
18                     map.put(temp[i], 1);
19                 }else {
20                     map.put(temp[i], count+1);
21                 }
22             }*/
23             //改进
24             for(String cont:temp) {
25                 if(map.containsKey(cont)) {
26                     map.put(cont, map.get(cont)+1);
27                 }else {
28                     map.put(cont, 1);
29                 }
30             }
31             //返回value集合
32             Object[] dp = map.values().toArray();
33             Arrays.sort(dp); //排序
34             
35             //输出前先建造打印结果
36             StringBuilder build = new StringBuilder(""+dp[0]);
37             for(int i=1;i<dp.length;i++) {
38                 build.append(" "+dp[i]);
39             }
40             System.out.println(build.toString());
41             
42         }
43 
44     }
45 
46 }

 

原文地址:https://www.cnblogs.com/dream-flying/p/12800612.html