Advertisement
brsjak

АПС - Фрекфентен Стринг

Aug 22nd, 2019
1,616
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.45 KB | None | 0 0
  1. /*
  2. Фреквентен стринг Problem 3 (2 / 8)
  3.  
  4. Даден е стринг. Треба да се најде најчестиот под-стринг кој е дел од него и да се испечати. Доколку два под-стринга се исто фреквентни, тогаш се печати подолгиот. Доколку и овој услов го исполнуваат тогаш се печати лексикографски помалиот.
  5.  
  6. Пример: За стрингот "abc" под-стрингови се "a", "b", "c", "ab", "bc", "abc". Сите имаат иста честота па затоа се печати најдолгиот "abc".
  7.  
  8. Име на класата (Java): MostFrequentSubstring.
  9.  
  10. */
  11.  
  12. import java.io.BufferedReader;
  13. import java.io.IOException;
  14. import java.io.InputStreamReader;
  15.  
  16. class MapEntry<K extends Comparable<K>,E> implements Comparable<K> {
  17.  
  18.     K key;
  19.     E value;
  20.  
  21.     public MapEntry (K key, E val) {
  22.         this.key = key;
  23.         this.value = val;
  24.     }
  25.    
  26.     public int compareTo (K that) {
  27.         @SuppressWarnings("unchecked")
  28.         MapEntry<K,E> other = (MapEntry<K,E>) that;
  29.         return this.key.compareTo(other.key);
  30.     }
  31.  
  32.     public String toString () {
  33.         return "(" + key + "," + value + ")";
  34.     }
  35. }
  36.  
  37. class SLLNode<E> {
  38.     protected E element;
  39.     protected SLLNode<E> succ;
  40.  
  41.     public SLLNode(E elem, SLLNode<E> succ) {
  42.         this.element = elem;
  43.         this.succ = succ;
  44.     }
  45.  
  46.     @Override
  47.     public String toString() {
  48.         return element.toString();
  49.     }
  50. }
  51.  
  52. class CBHT<K extends Comparable<K>, E> {
  53.  
  54.     private SLLNode<MapEntry<K,E>>[] buckets;
  55.  
  56.     @SuppressWarnings("unchecked")
  57.     public CBHT(int m) {
  58.         buckets = (SLLNode<MapEntry<K,E>>[]) new SLLNode[m];
  59.     }
  60.  
  61.     private int hash(K key) {
  62.         return Math.abs(key.hashCode()) % buckets.length;
  63.     }
  64.  
  65.     public SLLNode<MapEntry<K,E>> search(K targetKey) {
  66.         int b = hash(targetKey);
  67.         for (SLLNode<MapEntry<K,E>> curr = buckets[b]; curr != null; curr = curr.succ) {
  68.             if (targetKey.equals(((MapEntry<K, E>) curr.element).key))
  69.                 return curr;
  70.         }
  71.         return null;
  72.     }
  73.  
  74.     public void insert(K key, E val) {      // Insert the entry <key, val> into this CBHT.
  75.         MapEntry<K, E> newEntry = new MapEntry<K, E>(key, val);
  76.         int b = hash(key);
  77.         for (SLLNode<MapEntry<K,E>> curr = buckets[b]; curr != null; curr = curr.succ) {
  78.             if (key.equals(((MapEntry<K, E>) curr.element).key)) {
  79.                 curr.element = newEntry;
  80.                 return;
  81.             }
  82.         }
  83.         buckets[b] = new SLLNode<MapEntry<K,E>>(newEntry, buckets[b]);
  84.     }
  85.  
  86.     public void delete(K key) {
  87.         int b = hash(key);
  88.         for (SLLNode<MapEntry<K,E>> pred = null, curr = buckets[b]; curr != null; pred = curr, curr = curr.succ) {
  89.             if (key.equals(((MapEntry<K,E>) curr.element).key)) {
  90.                 if (pred == null)
  91.                     buckets[b] = curr.succ;
  92.                 else
  93.                     pred.succ = curr.succ;
  94.                 return;
  95.             }
  96.         }
  97.     }
  98.  
  99.     public String toString() {
  100.         String temp = "";
  101.         for (int i = 0; i < buckets.length; i++) {
  102.             temp += i + ":";
  103.             for (SLLNode<MapEntry<K,E>> curr = buckets[i]; curr != null; curr = curr.succ) {
  104.                 temp += curr.element.toString() + " ";
  105.             }
  106.             temp += "\n";
  107.         }
  108.         return temp;
  109.     }
  110.    
  111.     public static String FrequentString(CBHT<String,Integer> table) {
  112.         String FrequentString = "";
  113.         int max=0;
  114.        
  115.         for(int i=0;i<table.buckets.length;i++) {
  116.             for(SLLNode<MapEntry<String, Integer>> node = table.buckets[i]; node!=null; node=node.succ) {
  117.                
  118.                 if(node.element.value>max) {
  119.                     FrequentString = node.element.key;
  120.                     max=node.element.value;
  121.                 } else if(node.element.value == max) {
  122.                     if(node.element.key.length()>FrequentString.length()) {
  123.                         FrequentString=node.element.key;
  124.                        
  125.                     }
  126.                 }
  127.             }
  128.         }
  129.        
  130.         return FrequentString;
  131.     }
  132.  
  133. }
  134.  
  135. public class MostFrequentSubstring {
  136.     public static void main (String[] args) throws IOException {
  137.         CBHT<String,Integer> tabela = new CBHT<String,Integer>(300);
  138.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  139.        
  140.         String word = br.readLine().trim();
  141.        
  142.         for(int i=0;i<word.length();i++) {
  143.             for(int j=i+1;j<=word.length();j++) {
  144.                 String sub = word.substring(i,j);
  145.                
  146.                 SLLNode<MapEntry<String, Integer>> node = tabela.search(sub);
  147.                
  148.                 if(node==null) {
  149.                     tabela.insert(sub, 1);
  150.                 } else {
  151.                     int value = node.element.value;
  152.                     tabela.insert(sub, value+1);
  153.                 }
  154.             }
  155.         }
  156.        
  157.         System.out.println(CBHT.FrequentString(tabela));
  158.     }
  159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement