import
java.util.Arrays;
import
java.util.HashMap;
public
class
MaxValidSubstring {
static
String maxValue(String s,
int
i,
int
j) {
String s1 = s.substring(i, j +
1
);
char
[] chars = s1.toCharArray();
Arrays.sort(chars);
return
new
StringBuilder(
new
String(chars)).reverse().toString();
}
static
String maxOfBoth(String s1, String s2) {
if
(s1.length() > s2.length()) {
return
s1;
}
else
if
(s2.length() > s1.length()) {
return
s2;
}
return
(s1.compareTo(s2) >
0
) ? s1 : s2;
}
static
String maxValidSubstring(String s) {
HashMap<Long, Long> visited =
new
HashMap<>();
int
mask =
0
, n = s.length();
String result =
"-1"
;
for
(
int
i =
0
; i < n; i++) {
mask ^= (
1
<< (s.charAt(i) -
'a'
));
if
(mask ==
0
) {
result = maxOfBoth(result, maxValue(s,
0
, i));
}
if
(visited.containsKey((
long
) mask)) {
result = maxOfBoth(result, maxValue(s, visited.get((
long
) mask).intValue() +
1
, i));
}
if
(!visited.containsKey((
long
) mask)) {
visited.put((
long
) mask, (
long
) i);
}
}
return
result;
}
public
static
void
main(String[] args) {
String s =
"bafbssbf"
;
System.out.println(maxValidSubstring(s));
}
}