Repository navigation
Expand file tree
/
Copy pathLeetCode3992.java
More file actions
52 lines (48 loc) · 1.97 KB
/
Copy pathLeetCode3992.java
File metadata and controls
52 lines (48 loc) · 1.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import java.util.Arrays;
import java.util.Comparator;
import java.util.OptionalDouble;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
//3992. Rearrange String to Avoid Character Pair
public class LeetCode3992 {
public String rearrangeString_1(String s, char x, char y) {
return s.chars()
.mapToObj(n -> (char)n)
.sorted(
// 1. Group characters by priority weights
Comparator
.<Character>comparingInt(ch -> {
if (ch == y) return 0; // 'y' always goes to the very front
if (ch == x) return 2; // 'x' always goes to the very back
return 1; // All other characters stay in the middle
})
// 2. Tie-breaker ensures elements with the same weight match consistently
//.thenComparing(Character::compareTo)
)
.map(String::valueOf)
.collect(Collectors.joining());
}
//Simple Approach
public String rearrangeString(String s, char x, char y) {
return s.chars()
.mapToObj(n -> (char) n)
.sorted(Comparator.<Character>comparingInt(ch -> ch == y ? 0 : 1))
.map(String::valueOf)
.collect(Collectors.joining());
}
// another approach
public String rearrangeString2(String s, char x, char y) {
return s.chars()
.mapToObj(n -> (char) n)
.sorted((m, n) -> {
if (m == y)
return -1; // m is 'y', so m comes first
if (n == y)
return 1; // n is 'y', so n comes first
return m.compareTo(n);
})
.map(String::valueOf)
.collect(Collectors.joining());
}
}