Advertisement
nocturnalmk

MostFrequentSubstring.java

Dec 18th, 2012
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.16 KB | None | 0 0
  1. package zad3;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.util.ArrayList;
  7. import java.util.Collections;
  8.  
  9. class MapEntry<K extends Comparable<K>,E> implements Comparable<K> {
  10.  
  11.     K key;
  12.     E value;
  13.  
  14.     public MapEntry (K key, E val) {
  15.         this.key = key;
  16.         this.value = val;
  17.     }
  18.    
  19.     public int compareTo (K that) {
  20.         @SuppressWarnings("unchecked")
  21.         MapEntry<K,E> other = (MapEntry<K,E>) that;
  22.         return this.key.compareTo(other.key);
  23.     }
  24.  
  25.     public String toString () {
  26.         return "(" + key + "," + value + ")";
  27.     }
  28. }
  29.  
  30. class SLLNode<E> {
  31.     protected E element;
  32.     protected SLLNode<E> succ;
  33.  
  34.     public SLLNode(E elem, SLLNode<E> succ) {
  35.         this.element = elem;
  36.         this.succ = succ;
  37.     }
  38.  
  39.     @Override
  40.     public String toString() {
  41.         return element.toString();
  42.     }
  43. }
  44.  
  45. class CBHT<K extends Comparable<K>, E> {
  46.  
  47.     private SLLNode<MapEntry<K,E>>[] buckets;
  48.  
  49.     @SuppressWarnings("unchecked")
  50.     public CBHT(int m) {
  51.         buckets = (SLLNode<MapEntry<K,E>>[]) new SLLNode[m];
  52.     }
  53.  
  54.     private int hash(K key) {
  55.         return Math.abs(key.hashCode()) % buckets.length;
  56.     }
  57.  
  58.     public SLLNode<MapEntry<K,E>> search(K targetKey) {
  59.         int b = hash(targetKey);
  60.         for (SLLNode<MapEntry<K,E>> curr = buckets[b]; curr != null; curr = curr.succ) {
  61.             if (targetKey.equals(((MapEntry<K, E>) curr.element).key))
  62.                 return curr;
  63.         }
  64.         return null;
  65.     }
  66.  
  67.     public void insert(K key, E val) {      // Insert the entry <key, val> into this CBHT.
  68.         MapEntry<K, E> newEntry = new MapEntry<K, E>(key, val);
  69.         int b = hash(key);
  70.         for (SLLNode<MapEntry<K,E>> curr = buckets[b]; curr != null; curr = curr.succ) {
  71.             if (key.equals(((MapEntry<K, E>) curr.element).key)) {
  72.                 curr.element = newEntry;
  73.                 return;
  74.             }
  75.         }
  76.         buckets[b] = new SLLNode<MapEntry<K,E>>(newEntry, buckets[b]);
  77.     }
  78.  
  79.     public void delete(K key) {
  80.         int b = hash(key);
  81.         for (SLLNode<MapEntry<K,E>> pred = null, curr = buckets[b]; curr != null; pred = curr, curr = curr.succ) {
  82.             if (key.equals(((MapEntry<K,E>) curr.element).key)) {
  83.                 if (pred == null)
  84.                     buckets[b] = curr.succ;
  85.                 else
  86.                     pred.succ = curr.succ;
  87.                 return;
  88.             }
  89.         }
  90.     }
  91.  
  92.     public String toString() {
  93.         String temp = "";
  94.         for (int i = 0; i < buckets.length; i++) {
  95.             temp += i + ":";
  96.             for (SLLNode<MapEntry<K,E>> curr = buckets[i]; curr != null; curr = curr.succ) {
  97.                 temp += curr.element.toString() + " ";
  98.             }
  99.             temp += "\n";
  100.         }
  101.         return temp;
  102.     }
  103.  
  104. }
  105.  
  106. public class MostFrequentSubstring {
  107.     public static void main (String[] args) throws IOException {
  108.         CBHT<String,Integer> tabela = new CBHT<String,Integer>(300);
  109.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  110.        
  111.         String word = br.readLine().trim();
  112.         ArrayList<String> all = new ArrayList<String>();
  113.        
  114.         for (int i=0; i<word.length(); i++) {
  115.             String tmp = "";
  116.             for (int j=i; j<word.length(); j++) {
  117.                 tmp += word.charAt(j);
  118.                 all.add(tmp);
  119.             }
  120.         }
  121.        
  122.         for (String w : all) {
  123.             SLLNode<MapEntry<String, Integer>> c = tabela.search(w);
  124.             if (c == null) {
  125.                 tabela.insert(w, 1);
  126.             } else {
  127.                 int count = c.element.value;
  128.                 tabela.insert(w, count+1);
  129.             }
  130.         }
  131.        
  132.         int max = 1;
  133.         ArrayList<String> najg = new ArrayList<String>();
  134.        
  135.         for (String w : all) {
  136.             SLLNode<MapEntry<String, Integer>> c = tabela.search(w);
  137.             if (c != null) {
  138.                 int count = c.element.value;
  139.  
  140.                 if (count > max) {
  141.                     max = count;
  142.                     najg = new ArrayList<String>();
  143.                     najg.add(c.element.key);
  144.                 } else if (count == max) {
  145.                     najg.add(c.element.key);
  146.                 }
  147.             }
  148.         }
  149.        
  150.         if (najg.size() == 1) {
  151.             System.out.println(najg.get(0));
  152.             return;
  153.         }
  154.        
  155.         ArrayList<String> najdolgi = new ArrayList<String>();
  156.         max = 0;
  157.        
  158.         for (String w : najg) {
  159.             if (w.length() > max) {
  160.                 max = w.length();
  161.                 najdolgi = new ArrayList<String>();
  162.                 najdolgi.add(w);
  163.             } else if (w.length() == max) {
  164.                 najdolgi.add(w);
  165.             }
  166.         }
  167.        
  168.         if (najdolgi.size() == 1) {
  169.             System.out.println(najdolgi.get(0));
  170.             return;
  171.         }
  172.        
  173.         Collections.sort(najdolgi);
  174.        
  175.         System.out.println(najdolgi.get(0));
  176.        
  177.     }
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement