Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java I';我试图用递归法找到给定字符串的秩_Java_String_Recursion_Permutation - Fatal编程技术网

Java I';我试图用递归法找到给定字符串的秩

Java I';我试图用递归法找到给定字符串的秩,java,string,recursion,permutation,Java,String,Recursion,Permutation,我试图使用递归查找给定字符串的秩,但似乎无法按照我想要的方式从递归中走出来。我哪里出错了? class Solution { public static int flag=0; public static int ans=0; public static int findRank(String A) { /* write your solution here */ char[] carr=A.toCharArray(); Arr

我试图使用递归查找给定字符串的秩,但似乎无法按照我想要的方式从递归中走出来。我哪里出错了?

    class Solution {
    public static int flag=0;
    public static int ans=0;
    public static int findRank(String A) {
      /* write your solution here */
      char[] carr=A.toCharArray();
      Arrays.sort(carr);
      String suffix=new String(carr);
      ArrayList<String> list=new ArrayList<String>();
          int rank=0;
      rank=generate(rank,"",suffix,list,A);

      for(int i=0;i<list.size();i++)
        System.out.print(list.get(i)+" ");

       return rank;
     }

    public static int generate(int rank,String prefix,String suffix, ArrayList<String> list,String A){
        if(suffix.length()==0){
            list.add(prefix);
            rank++; 
            if(prefix.equals(A)){

                return rank;
            }
        }

        for(int i=0;i<suffix.length();i++) {
          //  System.out.println(rank);
          return generate(rank,prefix+suffix.charAt(i),suffix.substring(0,i)+suffix.substring(i+1),list, A); 
        }

        return rank;
    }
}
类解决方案{
公共静态int标志=0;
公共静态int ans=0;
公共静态整数(字符串A){
/*在这里写下你的解决方案*/
char[]carr=A.toCharArray();
数组。排序(carr);
字符串后缀=新字符串(carr);
ArrayList=新建ArrayList();
int秩=0;
秩=生成(秩,“,后缀,列表,A);

for(int i=0;ifor循环使您在找到第一个置换后结束递归,这就是您总是返回1的原因

您应该做的是在找到要查找的置换后结束递归。例如,如果您的递归方法将返回一个
boolean
标志而不是
int
,则可以这样做

递归方法返回后,
列表的长度将是您要查找的排名:

public static int findRank(String A) 
{
    char[] carr=A.toCharArray();
    Arrays.sort(carr);
    String suffix=new String(carr);
    ArrayList<String> list=new ArrayList<String>();
    generate("",suffix,list,A);
    for(int i=0;i<list.size();i++)
        System.out.print(list.get(i)+" ");

     return list.size();
}

public static boolean generate(String prefix,String suffix, ArrayList<String> list,String A)
{
    if(suffix.length()==0){
        list.add(prefix);
        return (prefix.equals(A));
    }

    for(int i=0;i<suffix.length();i++) {
        if (generate(prefix+suffix.charAt(i),suffix.substring(0,i)+suffix.substring(i+1),list, A)) {
            return true;
        }
    }

    return false;
}
public static int(字符串A)
{
char[]carr=A.toCharArray();
数组。排序(carr);
字符串后缀=新字符串(carr);
ArrayList=新建ArrayList();
生成(“”,后缀,列表,A);

for(int i=0;ifor循环使您在找到第一个置换后结束递归,这就是您总是返回1的原因

您应该做的是在找到要查找的置换后结束递归。例如,如果您的递归方法将返回一个
boolean
标志而不是
int
,则可以这样做

递归方法返回后,
列表的长度将是您要查找的排名:

public static int findRank(String A) 
{
    char[] carr=A.toCharArray();
    Arrays.sort(carr);
    String suffix=new String(carr);
    ArrayList<String> list=new ArrayList<String>();
    generate("",suffix,list,A);
    for(int i=0;i<list.size();i++)
        System.out.print(list.get(i)+" ");

     return list.size();
}

public static boolean generate(String prefix,String suffix, ArrayList<String> list,String A)
{
    if(suffix.length()==0){
        list.add(prefix);
        return (prefix.equals(A));
    }

    for(int i=0;i<suffix.length();i++) {
        if (generate(prefix+suffix.charAt(i),suffix.substring(0,i)+suffix.substring(i+1),list, A)) {
            return true;
        }
    }

    return false;
}
public static int(字符串A)
{
char[]carr=A.toCharArray();
数组。排序(carr);
字符串后缀=新字符串(carr);
ArrayList=新建ArrayList();
生成(“”,后缀,列表,A);

对于(int i=0;i)系列“abc acb bac bca cab cba”中的“秩”是什么意思,“acb”的秩应该是2.ehm,好吗?为什么?@Stultuske在问题中解释得令我满意,并通过一个示例加以支持:排列字符串。排序排列。确定索引(1-开始)对于原始string.afraah,请使用一致的缩进。在“abc acb bac bca cab cba”系列中,“acb”的排名是2.ehm,这是什么意思?为什么?@Stultuske在问题中解释得让我满意,并通过一个示例得到支持:排列字符串。排序排列。确定索引(1-起始)的原始字符串。afraah,请应用一致的缩进。