稍大的串

题目描述
串可以按照字典序进行比较。例如:
  abcd 小于 abdc

  如果给定一个串,打乱组成它的字母,重新排列,可以得到许多不同的串,在这些不同的串中,有一个串刚好给定的串稍微大一些。科学地说:它是大于已知串的所有串中最小的串。你的任务就是求出这个“稍大的串”。
输入
输入一个串,长度不超过1000个字符。
 
输出
输出这个稍大的串
样例输入
 abfxy
样例输出
 
 abfyx
 
解题思路:
这里我们用到next_permutation(start, end)就能解决.
 

组合数学中经常用到排列,这里介绍一个计算序列全排列的函数:next_permutation(start,end),和prev_permutation(start,end)。这两个函数作用是一样的,区别就在于前者求的是当前排列的下一个排列,后一个求的是当前排列的上一个排列。至于这里的“前一个”和“后一个”,我们可以把它理解为序列的字典序的前后,严格来讲,就是对于当前序列pn,他的下一个序列pn+1满足:不存在另外的序列pm,使pn<pm<pn+1.

具体可以看https://blog.csdn.net/ac_gibson/article/details/45308645

//
//  main.cpp
//  c++prime
//
//  Created by SJCHEN on 2019/1/19.
//  Copyright © 2019 SJCHEN. All rights reserved.
//

#include<algorithm>
#include<cstring>
#include <iostream>
using namespace std;
int main()
{
    char a[1111];
    int len;
    cin >> a;
    len = strlen(a);
    next_permutation(a, a+len);
    cout << a;
    return 0;
}

 

posted @ 2019-03-18 21:20  codeSJCHEN  阅读(398)  评论(0编辑  收藏  举报