这是我的代码来计算转数。
但是IDK,这是什么问题。
谁能解释和帮助我。


  测试用例:输入:david vidda
  
  输出2


我试图采用暴力手段,但那甚至没有用。
谁能指出我的错误?

import java.util.*;

class solution{
    public static int arrayLeftRotation(StringBuilder str1, StringBuilder str2)
    {
     int i;
     int count =0;
     for (i = 0; i < str1.length(); i++){
        if(str1.equals(str2))
        {
            count++;
            str1 = leftRotatebyOne(str1);
            System.out.println(str1);
        }
        else return count;
     }

        return count;
    }

    static StringBuilder leftRotatebyOne(StringBuilder str)
    {
        int i;
        char temp = str.charAt(0);
        for (i = 0; i < str.length()-1; i++)
            str.setCharAt(str.indexOf(str.charAt(i)+""),str.charAt(i+1));
        str.setCharAt(i,temp);
        return str;
    }

    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        String strr1= in.nextLine();
        StringBuilder str1  = new StringBuilder(strr1);
        String strr2 = in.nextLine();
        StringBuilder str2  = new StringBuilder(strr2);
        System.out.print(arrayLeftRotation(str1, str2));
    }
}

最佳答案

您的方法leftRotateByOne看起来比必需的更为复杂。
尝试这个:

public class Solution
{
  public static int arrayLeftRotation(String str1,
                                      String str2)
  {
    int nr_rotate;
    int counter;
    nr_rotate = 0;
    for (counter = 0; counter < str1.length(); counter++)
    {
      if (str1.equals(str2))
        return (nr_rotate);
      else
      {
        str1 = leftRotateByOne(str1);
        nr_rotate++;
        System.out.println(str1);
      }
    }

    // No possible solution
    return (-1);

  } // arrayLeftRotation

  public static String leftRotateByOne(String str)
  {
    return (str.substring(1) + str.charAt(0));
  }

  public static void main(String[] args)
  {
    String str1 = "david";
    String str2 = "vidda";
    System.out.print(arrayLeftRotation(str1, str2));
  }

} // class Solution

10-06 16:18