制作字符串所需的转数

时间:2018-09-14 07:58:53

标签: java

这是我的计算转数的代码。 但是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));
    }
}

3 个答案:

答案 0 :(得分:3)

您的方法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

答案 1 :(得分:2)

arrayLeftRotation的另一种可能的解决方案,

public static int arrayLeftRotation(String str1, String str2) {
    StringBuilder builder = new StringBuilder(str1);
    for (int i = 0; i < str1.length(); i++) {
        builder.append(str1.charAt(i)).delete(0, 1);
        if (str2.equals(builder.toString())) {
            return i + 1;
        }
    }
    return -1;
}

注意:如果找不到匹配项,它将返回-1

答案 2 :(得分:1)

我只是想指出您的错误所在并解决它。

您的错误位于您的leftRotatebyOne中:

for (i = 0; i < str.length()-1; i++) 
   str.setCharAt(str.indexOf(str.charAt(i)+""),str.charAt(i+1)); // your error while shifting to the left;

您想要做的是向左移动一个位置,您应该按照以下步骤操作:

for (i = 0; i < str.length()-1; i++) 
   str.setCharAt(i,str.charAt(i+1));

然后您的方法将起作用。

但是我不得不说 Alex M 为您的问题提供了更清洁的解决方案。也许您应该尝试一下。

您的解决方案可以是(修复之后):

public class RotationCount {
    public static int arrayLeftRotation(StringBuilder str1, StringBuilder str2) {
        int i;
        int count = 0;
        for (i = 0; i < str1.length(); i++) {
            if (!str1.toString().equals(str2.toString())) {
                count++;
                str1 = leftRotatebyOne(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(i, str.charAt(i + 1));
        }
        str.setCharAt(i, temp);
        return str;
    }

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