题解 | #小红的字符串构造#
小红的字符串构造
https://www.nowcoder.com/practice/3e4b4dabc2e444e384c3ae62ac7dd84e
思路可以看代码中的注释。。。。。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String s = in.nextLine(); // 将输入的字符串转换成字符数组 char[] c = s.toCharArray(); // 记录原字符串中出现的字符种类 boolean[] flag = new boolean[26]; for(int i=0; i<c.length; i++){ flag[c[i] - 'a'] = true; } // 在每次遍历过程中,将遇到的字符变成离它距离最近的右边一个字符 for(int i=0; i<c.length; i++) { // 记录交换的标记;标记的作用是,如果改变了说明该位置的字符与原来的字符不一致;否则一致则没有变化,不符合要求,直接返回-1即可。 boolean t = false; int k = c[i] - 'a'; for(int j=k+1; j<26+k; j++){ if(flag[j%26]){ t = true; c[i] = (char) (j%26 + 'a'); } } if(!t){ System.out.println(-1); return ; } } System.out.println(new String(c)); } }