YChalk

SubString Anagrams

Apr 7th, 2022 (edited)
697
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.32 KB | None | 0 0
  1. import java.io.*;
  2. import java.math.*;
  3. import java.security.*;
  4. import java.text.*;
  5. import java.util.*;
  6. import java.util.concurrent.*;
  7. import java.util.function.*;
  8. import java.util.regex.*;
  9. import java.util.stream.*;
  10. import static java.util.stream.Collectors.joining;
  11. import static java.util.stream.Collectors.toList;
  12.  
  13. class Result {
  14.  
  15.     /*
  16.      * Complete the 'sherlockAndAnagrams' function below.
  17.      *
  18.      * The function is expected to return an INTEGER.
  19.      * The function accepts STRING s as parameter.
  20.      */
  21.    
  22.     //#2
  23.     public static int sherlockAndAnagrams(String s) {
  24.     // Write your code here
  25.     int result = 0;  
  26.    
  27.     char[] letters = s.toCharArray();
  28.    
  29.     List<List<List<Character>>> subStrings = new ArrayList<>();
  30.    
  31.     for (int i = 0 ; i < letters.length; i++) {
  32.         List<Character> subString = new ArrayList<>();
  33.         List<List<Character>> letter = new ArrayList<>();
  34.         subString.add(letters[i]);
  35.        
  36.        
  37.         for (int j = i; j < letters.length; j++) {
  38.             letter.add(new ArrayList<>(subString));
  39.         }
  40.        
  41.         subStrings.add(letter);
  42.        
  43.         for (int j = 0 ; j < i ; j++) {
  44.             for (int k = 0 ; k < letters.length - i; k++) {
  45.                 subStrings.get(j).get(k).add(letters[i]);
  46.             }
  47.         }
  48.     }
  49.    
  50.     /*for (List<List<Character>> list : subStrings) {
  51.         for (List<Character> list1 : list) {
  52.             System.out.println(list1);
  53.         }
  54.     }*/
  55.    
  56.     /*for (int i = 0; i < subStrings.size(); i++) {
  57.         for (int j = 0; j < subStrings.get(i).size(); j++) {
  58.             System.out.println(subStrings.get(i).get(j));
  59.         }
  60.     }*/
  61.    
  62.     for (int i = 0; i < subStrings.size()-1; i++) {
  63.         for (int j = subStrings.get(i).size() -1; j > 0 ; j--) {
  64.             if (subStrings.get(i).get(j) == null) {
  65.                 continue;
  66.             }
  67.             int frequency = 1;            
  68.             for (int k = i + 1 ; k < j + 1; k++) {
  69.                 /*System.out.println(subStrings.get(i).get(j));
  70.                 System.out.println(subStrings.get(k).get(j - k + i));
  71.                 System.out.println("");*/
  72.                
  73.                 if (subStrings.get(k).get(j - k + i) == null) {
  74.                     continue;
  75.                 }
  76.                 if (subStrings.get(i).get(j).containsAll(subStrings.get(k).get(j - k + i))
  77.                 && subStrings.get(k).get(j - k + i).containsAll(subStrings.get(i).get(j))) {
  78.                     frequency++;
  79.                     subStrings.get(k).set(j - k + i, null);
  80.                    
  81.                    
  82.                    
  83.                 }
  84.             }
  85.             System.out.println(frequency);
  86.             result += count(frequency);
  87.            
  88.         }
  89.     }
  90.    
  91.        
  92.     return result;
  93.  
  94.  
  95.     }
  96.    
  97.     public static int count(int frequency) {
  98.         int result = 0;
  99.         for (int i = 0; i < frequency ; i++) {
  100.             result += i;
  101.         }
  102.        
  103.         return result;
  104.     }
  105.  
  106.     //#1
  107.     public static int sherlockAndAnagrams(String s) {
  108.     // Write your code here
  109.     int result = 0;
  110.    
  111.     int length = s.length();
  112.     int maxSubStringLength = length / 2;    
  113.    
  114.     List<List<Character>> subStrings = new ArrayList<>();
  115.    
  116.     for (int i = 0 ; i < length ; i++) {
  117.         for (int j = i + 1; j <= length ; j++) {
  118.             String subString = s.substring(i, j);
  119.             /*if (subString.length() > maxSubStringLength) {
  120.                 break;
  121.             }*/
  122.            
  123.             List<Character> chars = subString
  124.                 .chars()
  125.                 .mapToObj(e -> (char)e)
  126.                 .sorted()  
  127.                 .collect(Collectors.toList());
  128.                
  129.             subStrings.add(chars);
  130.         }
  131.     }
  132.    
  133.     /*for (List<Character> list : subStrings) {
  134.         System.out.println(list);
  135.     }*/
  136.    
  137.     List<List<Character>> checked = new ArrayList<>();  
  138.  
  139.    
  140.     while (subStrings.size() > 0) {
  141.         checked.add(subStrings.get(0));
  142.        
  143.         int frequency = Collections.frequency(subStrings, subStrings.get(0));
  144.        
  145.         result += count(frequency);
  146.        
  147.         subStrings.removeAll(checked);
  148.     }
  149.    
  150.    
  151.     return result;
  152.  
  153.  
  154.     }
  155.    
  156.     public static int count(int frequency) {
  157.         int result = 0;
  158.         for (int i = 0; i < frequency ; i++) {
  159.             result += i;
  160.         }
  161.        
  162.         return result;
  163.     }
  164.  
  165. }
  166.  
  167. public class Solution {
  168.     public static void main(String[] args) throws IOException {
  169.         BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
  170.         BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
  171.  
  172.         int q = Integer.parseInt(bufferedReader.readLine().trim());
  173.  
  174.         IntStream.range(0, q).forEach(qItr -> {
  175.             try {
  176.                 String s = bufferedReader.readLine();
  177.  
  178.                 int result = Result.sherlockAndAnagrams(s);
  179.  
  180.                 bufferedWriter.write(String.valueOf(result));
  181.                 bufferedWriter.newLine();
  182.             } catch (IOException ex) {
  183.                 throw new RuntimeException(ex);
  184.             }
  185.         });
  186.  
  187.         bufferedReader.close();
  188.         bufferedWriter.close();
  189.     }
  190. }
Add Comment
Please, Sign In to add comment