I made a recursion solution:
public class AbcsSwaps {
List<String> listOfPossibilities = List.of("AB", "BA", "CD", "DC");
public String solution(String s) {
if (s == null || s.length() == 0) return "";
if (s.length() == 1) return s;
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (i + 2 <= s.length()) {
String currString = s.substring(i, i + 2);
if (listOfPossibilities.stream().anyMatch(currString::equals)) {
String nextString = stringBuilder.append(s, 0, i).append(s.substring(i+2)).toString();
return helper(nextString);
}
}
}
return s;
}
public String helper(String s) {
if (listOfPossibilities.stream().noneMatch(s::contains)) return s;
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (i + 2 <= s.length()) {
String currString = s.substring(i, i + 2);
if (listOfPossibilities.stream().anyMatch(currString::equals)) {
String nextString = stringBuilder.append(s, 0, i).append(s.substring(i+2)).toString();
return helper(nextString);
}
}
}
return s;
}
}