java下一个按字典顺序排列的字符串
问题是找到比给定字符串更大的词典编纂字符串 例如:输入:DKHC OP:HKDC
我无法找出我的代码哪里做错了。有人能帮我调试一下吗
*
public static void main(String[] main)
{
String s = "gojh";
String op="";
//System.out.println();
int i=s.length()-1;
int j=i-1;
boolean swapped=false;
while(i>0)
{
j=i-1;
while(j>=0)
{ if(s.charAt(i)>s.charAt(j))
{ System.out.println(s.charAt(j)+" ->"+s.charAt(i));
s=s.substring(0,j)+s.charAt(i)+s.substring(j+1,i)+s.charAt(j)+s.substring(i+1);
swapped=true;
break;
}
else
{
j--;
}
}
System.out.println(i);
if(swapped)
break;
else
i--;
}
//System.out.println(s);
if((i-j)>=2)
op= minimize(s,j);
else
op=s;
System.out.println(op);
}
private static String minimize(String s,int index) {
String reverse="";
String original=s.substring(index+1);
int i=original.length()-1;
while(i>=0)
{
reverse=reverse+original.charAt(i);
i--;
}
//System.out.println(reverse);
return s.substring(0,index+1)+reverse;
}
*
# 1 楼答案
您的代码中没有给出I/O示例(代码的输入/输出和预期输出),因此无法对其进行调试。但只要看一眼就可以告诉我几件事:
实际上,您使用的是O(n^2)算法(n=字符串长度),而这很容易在一次迭代中解决
你的例子和问题描述是错误的。如果i/p是
DKHC
,那么下一个较大的词典字符串将是HCDK
,而不是HKDC
所以,假设你犯了一个错误,我给你一个算法来做正确的事情(根据问题描述)
charAt(i) < charAt(i+1)
所在的索引。到此为止。 (如果你没有得到这个条件,直到字符串的开头,给定i/p已经是你能得到的最大的词汇排列。你可以在那里显示一条错误消息)j
索引,这样charAt(i) < charAt(j)
。你肯定会找到这样的索引李>i
和j
处交换字符李>i+1
开始反转整个字符串李>