Advertisement
ogv

Untitled

ogv
May 29th, 2020
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.33 KB | None | 0 0
  1. class Solution {
  2. public String smallestStringWithSwaps(String s, List<List<Integer>> pairs) {
  3. char[] ca = s.toCharArray();
  4.  
  5. List<Integer>[] adj = new List[ca.length];
  6. for (int i = 0; i < ca.length; i++) adj[i] = new ArrayList<>();
  7.  
  8. for (List<Integer> pair: pairs) {
  9. adj[pair.get(0)].add(pair.get(1));
  10. adj[pair.get(1)].add(pair.get(0));
  11. }
  12.  
  13. int allFreq[][] = new int[ca.length][];
  14.  
  15. for (int i = 0; i < ca.length; i++) {
  16. if (adj[i].isEmpty()) continue;
  17.  
  18. if (allFreq[i] == null) collect(i, ca, adj, allFreq, new int[26]);
  19.  
  20. System.out.println(ca[i] + " " + Arrays.toString(allFreq[i]));
  21.  
  22. for (int j = 0; j <26; j++)
  23. if (allFreq[i][j] > 0) {
  24. ca[i] = (char)('a' + j);
  25. allFreq[i][j]--;
  26. }
  27. }
  28.  
  29. return new String(ca);
  30. }
  31.  
  32. private void collect(int pos, char[] ca, List<Integer>[] adj, int[][] allFreq, int[] freq) {
  33. if (allFreq[pos] != null) return;
  34. allFreq[pos] = freq;
  35.  
  36. freq[ca[pos]-'a']++;
  37. for (int next: adj[pos]) collect(next, ca, adj, allFreq, freq);
  38. }
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement