• [deleted]
    + 1 comment

    A Java solution

    Iterate reversely. If seeing any character behinds c[i] is bigger than c[i], swap that character with c[i] and sort the remaining characters behind.

    public static String biggerIsGreater(String w) {
        int n = w.length();
        char[] c = w.toCharArray();
        
        StringBuilder sb = new StringBuilder();
        for (int i = n-2; i >= 0; i--) {
            for (int j = n-1; j > i; j--) {
                if (c[j] > c[i]) {
                    sb.append(w.substring(0, i));
    								
                    sb.append(c[j]);
                    
                    String temp = w.substring(i, j) + w.substring(j+1);
                    char[] c2 = temp.toCharArray();
                    Arrays.sort(c2);
                    
                    sb.append(c2);
                    
                    return sb.toString();
                }
            }
        }
        
        return "no answer";
    }