标题:稍大的串
串可以按照字典序进行比较。例如:
abcd 小于 abdc
如果给定一个串,打乱组成它的字母,重新排列,可以得到许多不同的串,在这些不同的串中,有一个串刚好给定的串稍微大一些。科学地说:它是大于已知串的所有串中最小的串。你的任务就是求出这个“稍大的串”。
例如:
输入串:
abfxy
程序应该输出:
abfyx
再例如:
输入串:
ayyyxxff
程序应该输出:
fafxxyyy
数据规模约定:
输入的串不超过1000个字符。
特例:
如果已知的串已经是所有重组串中最大的,则原样输出读入的那个串。
public class LargerString {
static void f_next(char[] a) {
int x1 = -1;
int min = a.length - 1;
for (int i = a.length - 1; i > 0; i--) {
if (a[i] < a[min]) {
min = i; // 找到x1+1到串尾 ,最小的字符下标 min
}
if (a[i - 1] < a[i]) {
x1 = i - 1; // 找一个比后面字符小的字符, 下标为x1
break;
}
}
if (x1 < 0)
return;
char t = a[x1];
a[x1] = a[min]; // 交换x1和min
a[min] = t;
String s = "yyyyyffff";
int count;
for (int i = 1; i < a.length - x1 + 2; i++) // 对从x1+1开始到N-1的字符串按照从小到大排序。
{
count = 0;
for (int j = x1 + 1; j < a.length - i; j++)
if (a[j] > a[j + 1]) {
char p = a[j];
a[j] = a[j + 1];
a[j + 1] = p;
count++;
}
if (count == 0)
break;
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
char[] a = scan.nextLine().toCharArray();
f_next(a);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]);
}
System.out.println();
}
}
稍大的串
最新推荐文章于 2020-10-09 17:42:42 发布