有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    您的代码中没有给出I/O示例(代码的输入/输出和预期输出),因此无法对其进行调试。但只要看一眼就可以告诉我几件事:

    1. 实际上,您使用的是O(n^2)算法(n=字符串长度),而这很容易在一次迭代中解决

    2. 你的例子和问题描述是错误的。如果i/p是DKHC,那么下一个较大的词典字符串将是HCDK,而不是HKDC

    所以,假设你犯了一个错误,我给你一个算法来做正确的事情(根据问题描述)

    • 从绳子的末端开始。找到charAt(i) < charAt(i+1)所在的索引。到此为止。 (如果你没有得到这个条件,直到字符串的开头,给定i/p已经是你能得到的最大的词汇排列。你可以在那里显示一条错误消息)
    • 现在从结尾重复一遍,找到一个j索引,这样charAt(i) < charAt(j)。你肯定会找到这样的索引
    • 在索引ij处交换字符
    • 现在是最后一步。从索引i+1开始反转整个字符串