bigger is greater

heckerrank 算法题。

原题地址

此题大意为找到,字典序的下一个最小序列。

input


dhck
dkhc

output


dhkc
hcdk

通过代码


#include 
#include 
#include 
#include 
#include 

using namespace std;

string rever(string str, int index ){
    
    string temp = str.substr(index+1);

    int length = temp.length();
    for(int i = 0 ; i< length / 2;i++){
        char aa = temp[i];
        temp[i] = temp[length-i-1];
        temp[length-i-1] = aa;
    }
    string result = str.substr(0,index+1) + temp;
    return result;
}
void handle(string str){
    if( str.length() == 1 ){
        cout<<"no answer"<= 0 ; i-- ){
        if( str[ i ] < str[ i + 1 ] ) {
        
            for( int j = i + 1 ; j < length ; j++ ){
                if( str[i] < str[j] && (!str[j+1]||str[i] >= str[j+1])){
                    char temp = str[i];
                    str[i] = str[j];
                    str[j] = temp;
                    cout<>count;
    string s[count];
    for( int i = 0 ; i < count ; i++ ){
        cin>>s[i];
        handle(s[i]);
    }
    
    return 0;
}





我的解题思路

首先此题的难点就是找到最小的下一个字典序,所以,我从一个字符串的最后往前,进行遍历。


for( int i = length - 2 ; i >= 0 ; i-- )

如果str[i] < str[i+1],找到需要改变的子字符串。为str[i,length)


if( str[ i ] < str[ i + 1 ] ) {
        
            for( int j = i + 1 ; j < length ; j++ ){
                if( str[i] < str[j] && (!str[j+1]||str[i] >= str[j+1])){
                    char temp = str[i];
                    str[i] = str[j];
                    str[j] = temp;
                    cout<

你可能感兴趣的:(bigger is greater)