## 14 September 2014

### Quiz 27: Find the next bigger lexicographically string

Problem:
Given a String, find the next bigger lexicographically string.

Input Format:
String

Output Format:
next bigger lexicographically string

Constraints:
none

Sample Input
zcfedba

Sample Output:
zdabcef

Explanations:-
when compare characters from right to left, c < f, next bigger available character to c is d and rest series is sorted order of remaining characters.

Solution:

chomp(\$str=<STDIN>);
@arr=split("",\$str);
\$len=@arr;
\$count=1;
for(\$j=\$len-1;\$j>0;\$j--)
{
\$count++;
\$c1=ord(\$arr[\$j]);
\$c2=ord(\$arr[\$j-1]);
if(\$c1>\$c2)
{
@r=splice(@arr,\$j-1,\$count);
@s=sort(@r);
for(\$m=0;\$m<@s;\$m++)
{
\$c3=ord(\$s[\$m]);
\$c4=ord(\$r[0]);
\$c5=ord(\$s[\$m+1]);
if(\$c3 == \$c4 and \$c3!=\$c5)
{
\$arr[\$j-1] = \$s[\$m+1];
@s1=splice(@s,\$m+1,1);
push(@arr,@s);
last;
}
}
last;
}
}
\$ans=join("",@arr);
print "\$ans";

Tips:
Splice is used to remove some elements of array and store them somewhere else.