Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public String smallestStringWithSwaps(String s, List<List<Integer>> pairs) {
- char[] ca = s.toCharArray();
- List<Integer>[] adj = new List[ca.length];
- for (int i = 0; i < ca.length; i++) adj[i] = new ArrayList<>();
- for (List<Integer> pair: pairs) {
- adj[pair.get(0)].add(pair.get(1));
- adj[pair.get(1)].add(pair.get(0));
- }
- int allFreq[][] = new int[ca.length][];
- for (int i = 0; i < ca.length; i++) {
- if (adj[i].isEmpty()) continue;
- if (allFreq[i] == null) collect(i, ca, adj, allFreq, new int[26]);
- System.out.println(ca[i] + " " + Arrays.toString(allFreq[i]));
- for (int j = 0; j <26; j++)
- if (allFreq[i][j] > 0) {
- ca[i] = (char)('a' + j);
- allFreq[i][j]--;
- }
- }
- return new String(ca);
- }
- private void collect(int pos, char[] ca, List<Integer>[] adj, int[][] allFreq, int[] freq) {
- if (allFreq[pos] != null) return;
- allFreq[pos] = freq;
- freq[ca[pos]-'a']++;
- for (int next: adj[pos]) collect(next, ca, adj, allFreq, freq);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement