diff --git a/Data Structures/Trees/TreeTraversal.java b/Data Structures/Trees/TreeTraversal.java index bd0f2f7f5..60a2cd491 100644 --- a/Data Structures/Trees/TreeTraversal.java +++ b/Data Structures/Trees/TreeTraversal.java @@ -39,7 +39,7 @@ public class TreeTraversal { /** * The Node class which initializes a Node of a tree -* Consists of all 3 traversal methods: printInOrder, printPostOrder & printPreOrder +* Consists of all 4 traversal methods: printInOrder, printPostOrder, printPreOrder & printLevelOrder * printInOrder: LEFT -> ROOT -> RIGHT * printPreOrder: ROOT -> LEFT -> RIGHT * printPostOrder: LEFT -> RIGHT -> ROOT diff --git a/Others/TopKWords.java b/Others/TopKWords.java new file mode 100644 index 000000000..e2d3c6fa5 --- /dev/null +++ b/Others/TopKWords.java @@ -0,0 +1,84 @@ +import java.io.*; +import java.util.*; + +/* display the most frequent K words in the file and the times it appear + in the file – shown in order (ignore case and periods) */ + +public class TopKWords { + static class CountWords { + private String fileName; + + public CountWords(String fileName) { + this.fileName = fileName; + } + + public Map getDictionary() { + Map dictionary = new HashMap<>(); + FileInputStream fis = null; + + try { + + fis = new FileInputStream(fileName); // open the file + int in = 0; + String s = ""; // init a empty word + in = fis.read(); // read one character + + while (-1 != in) { + if (Character.isLetter((char)in)) { + s += (char)in; //if get a letter, append to s + } else { + // this branch means an entire word has just been read + if (s.length() > 0) { + // see whether word exists or not + if (dictionary.containsKey(s)) { + // if exist, count++ + dictionary.put(s, dictionary.get(s) + 1); + } else { + // if not exist, initiate count of this word with 1 + dictionary.put(s, 1); + } + } + s = ""; // reInit a empty word + } + in = fis.read(); + } + return dictionary; + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + // you always have to close the I/O streams + fis.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return null; + } + } + public static void main(String[] args) { + // you can replace the filePath with yours + CountWords cw = new CountWords("/Users/lisanaaa/Desktop/words.txt"); + Map dictionary = cw.getDictionary(); // get the words dictionary: {word: frequency} + + // we change the map to list for convenient sort + List> list = new ArrayList<>(dictionary.entrySet()); + + // sort by lambda valueComparator + list.sort(Comparator.comparing( + m -> m.getValue()) + ); + + Scanner input = new Scanner(System.in); + int k = input.nextInt(); + while (k > list.size()) { + System.out.println("Retype a number, your number is too large"); + input = new Scanner(System.in); + k = input.nextInt(); + } + for (int i = 0; i < k; i++) { + System.out.println(list.get(list.size() - i - 1)); + } + } +} +