Java 情书字符串旋转公司测试编程题库测试用例通过,隐藏测试用例失败

Java 情书字符串旋转公司测试编程题库测试用例通过,隐藏测试用例失败,java,string,substring,Java,String,Substring,我在名为mettl的平台上进行了一次招聘公司的测试 问题陈述: 你给你的朋友写了一封情书。但是,在您的朋友阅读之前,其他人会先阅读并将每个单词的字符旋转到正确的K倍。找出即使在字母移位后仍保持不变的单词数 注意:单词之间可以有多个空格 输入规格: 输入1:字符串 输入2:K发生旋转的次数 输出规格: 函数应该返回正确的字数 例1: 输入1:llohe ereth 投入2:2 输出:0 说明:在示例1中,llohe ereth是一个带K因子2的旋转字符串。因此,在从右向左移动最后两个字母后,我们在

我在名为mettl的平台上进行了一次招聘公司的测试

问题陈述:

你给你的朋友写了一封情书。但是,在您的朋友阅读之前,其他人会先阅读并将每个单词的字符旋转到正确的K倍。找出即使在字母移位后仍保持不变的单词数

注意:单词之间可以有多个空格

输入规格:

输入1:字符串

输入2:K发生旋转的次数

输出规格:

函数应该返回正确的字数

例1:

输入1:llohe ereth

投入2:2

输出:0

说明:在示例1中,llohe ereth是一个带K因子2的旋转字符串。因此,在从右向左移动最后两个字母后,我们在那里得到原始字符串Hello

例2:

输入1:adaada

投入2:3

产出:1

说明:在示例2中,当旋转3次时,ADADA返回ADADA。因此答案是1

我写了下面的解决方案,它通过了上述两个基本案例,但对于隐藏测试案例来说失败了,还包括时间复杂度测试案例。只有一个角落的测试用例通过,因为我正在检查字符串input1是否为空。解决方案如下:

public int rotatedWords(String input1, int input2) {
    int count = 0;
    String arr[] = input1.split(" ");
    if (input1 != null && !input1.isEmpty()) {
        for (int i = 0; i < arr.length; i++) {
            String s1 = arr[i] + arr[i];
            int start = arr[i].length() - input2;

            System.out.println("arr[i] : " + arr[i]);
            String s2 = s1.substring(start, start + arr[i].length());
            System.out.println("s2 : " + s2);
            if (s2.equalsIgnoreCase(arr[i])) {
                count++;
            }
        }
    }
    return count;
}

如果问这个问题,我无法理解为什么隐藏的测试用例会失败。请帮帮我。

这是Python 3中的解决方案

def rotatedWords(cls, input1,input2):
    rotateString = input1.split(' ')
    count = 0
    for i in range(1,input2+1):
        for j in range(len(rotateString)):
            rotateString[j]= rotateString[j][1:]+rotateString[j][0]
        
    actualWrod = input1.split(' ')

    for i in range(len(rotateString)):
        for j in range(len(actualWrod)):
            if rotateString[i]==actualWrod[j]:
                count+=1
    return count

print(rotatedWords(1,"adaada",3))
print(rotatedWords(1,"llohe ereth",2))
Java解决方案*


这是Python3中的解决方案

def rotatedWords(cls, input1,input2):
    rotate_string = input1.split(' ') # converting string to list
    count = 0
    for i in range(1,input2+1):
        for j in range(len(rotate_string)):
            rotate_string[j]= rotate_string[j][-1]+rotate_string[j][0:-1]
        
    actual_word = input1.split(' ')

    for i in range(len(rotate_string)):
        for j in range(len(actual_word)):
            if rotate_string[i]==actual_word[j]:
                count+=1
    return count

print(rotatedWords(1,"adaada",3))
print(rotatedWords(1,"llohe ereth",2))

尝试更多您自己的测试用例。您是否测试过他们笔记中提到的案例是否有效?是的,两个测试案例都运行良好。我也检查了我的机器。我还提到了基本测试用例正在通过的问题。试着想象一下隐藏测试用例可能会检查的一些事情,例如注释中特别指出的需求,并用它们来测试代码。想想实际的字母会是什么样子。也许你还需要处理其他一些符号。比如逗号和点。其他特殊角色呢?数字?标签?新行?@Monitoria是的,如果那天晚上是这样的话,我应该删除包含特殊字符的原始字符串。请解释问题中的代码有什么问题,以及该代码如何解决问题。似乎K表示他在句子中每个单词从左向右或从右向左移动了多少个字符,试试这个,它可能通过其他测试用例。请阅读并更新您的答案。
 def check(_str):
    length = len(_str)
    for i in range(length):
        if (_str[i]!=_str[(input2+i)%length]):
            return 0
    return 1
words = input1.split()
ans = list(map(check,words))
print(sum(ans))
package fun;

public class Test1 {

    public static void main(String[] args) {
        System.out.println(rotatedWords("llohe ereth", 2));
        System.out.println(rotatedWords("adaada", 3));
    }

    public static int rotatedWords(String input1, int input2) {
        int count = 0;
        String arr[] = input1.split(" ");
        if (input1 != null && !input1.isEmpty()) {
            for (int i = 0; i < arr.length; i++) {
                System.out.println("Orginal Word :" + arr[i]);
                int start = arr[i].length() - input2;
                String s1 = arr[i].substring(start);
                System.out.println("s1 : " + s1);
                String s2 = arr[i].substring(0, start);
                System.out.println("s2 : " + s2);
                System.out.println("New Word : " + s1 + s2);
                if ((s1 + s2).equals(arr[i])) {
                    count++;
                }
            }
        }
        return count;
    }

}
 import java.util.Scanner;
    public class Main
    {
     //rotate every word of the given string by the given rotation value
      public static String rotate_string (String str, int d) 
      {
        String ans = str.substring (d) + str.substring (0, d);
          return ans;
      }
      public static void rotated (String str, int rotated)
      {
        String[]wordsarr = str.split ("\\s"); // convert string to an array of strings.
        String rotatedarr[] = new String[wordsarr.length]; // to store the rotated array.
        for (int i = 0; i < wordsarr.length; i++)
          {
        rotatedarr[i] = rotate_string(wordsarr[i], wordsarr[i].length () - rotated);
          }
        int count = 0;
        for (int i = 0; i < wordsarr.length; i++)
          {
        if (wordsarr[i].equals (rotatedarr[i]))
          {
            count++;
          }
          }
        System.out.println (count);
      }

      public static void main (String[]args)
      {
        Scanner s= new Scanner(System.in);
        String str= s.nextLine(); //input string
        int rotate_by= s.nextInt(); 
        rotated(str,rotate_by);
      }
    }
$str = "Hello Friend";
$kTime = 5;
$arr = explode (' ',$str);
$sizeOfArr = count($arr);
$char = array();
$count = 0;
foreach($arr as $k=>$v)
{
  $ln = $kTime%strlen($v);
  $char = substr($v,$ln).substr($v,0,$ln);
  if($v == $char)
    {
      $count++;
    }
}
echo 'Number of Original word after rotation found : '.$count;
def rotatedWords(cls, input1,input2):
    rotate_string = input1.split(' ') # converting string to list
    count = 0
    for i in range(1,input2+1):
        for j in range(len(rotate_string)):
            rotate_string[j]= rotate_string[j][-1]+rotate_string[j][0:-1]
        
    actual_word = input1.split(' ')

    for i in range(len(rotate_string)):
        for j in range(len(actual_word)):
            if rotate_string[i]==actual_word[j]:
                count+=1
    return count

print(rotatedWords(1,"adaada",3))
print(rotatedWords(1,"llohe ereth",2))