首页 > 解决方案 > 来自 coderbyte 的无效结果

问题描述

参考下面的测试,有些测试用例实际上是失败的,即使输出是正确的。任何人都可以建议吗?

https://coderbyte.com/editor/Longest%20Word:Java

最长单词 让函​​数 LongestWord(sen) 接受传递的 sen 参数并返回字符串中的最大单词。如果有两个或多个长度相同的单词,则返回字符串中具有该长度的第一个单词。忽略标点符号并假设 sen 不会为空。 例子

输入:“fun&!! 时间”

输出:时间

输入:“我爱狗”

输出:爱

以下是无效的失败测试用例

  1. 对于输入“一个美丽的句子^&!” 输出不正确。正确的输出很漂亮

  2. 对于输入“oxford press”,输出不正确。正确的输出是牛津

  3. 对于输入“123456789 98765432”,输出不正确。正确的输出是 123456789

  4. 对于输入“abc dee”,输出不正确。正确的输出是 dee

  5. 对于输入“一个令人困惑的 /:sentence:/[ 这不是!!!!!!!~”输出不正确。正确的输出令人困惑

该程序

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Main {

    public static final String REG_EXP_CHAR_ONLY = "(?=.*?[a-zA-Z0-9 ])";

    public static String LongestWord(String sen) {

        StringBuffer strBuffer = new StringBuffer();
        for (String c : sen.split("")) {
            //System.out.println("c--------->" + c);
            if (isValid(c)) {

                strBuffer.append(c);

            }
        }

        //System.out.println(strBuffer.toString());
        String longest = Arrays.stream(strBuffer.toString().split(" ")).max(Comparator.comparingInt(String::length))
                .orElse(null);

        return longest;
    }

    public static boolean isValid(String c) {
        // System.out.println("char -->" + c);
        Pattern pattern = Pattern.compile(REG_EXP_CHAR_ONLY);
        Matcher matcher = pattern.matcher(c);
        boolean matchFound = matcher.find();
        if (matchFound) {
            // System.out.println("Match found");
            return true;
        }
        return false;
    }


  public static void main (String[] args) {  
    // keep this function call here     
    Scanner s = new Scanner(System.in);
    System.out.print(LongestWord(s.nextLine())); 
  }

}

标签: javaalgorithmtesting

解决方案


看来这是 coderbyte 的问题。我复制了你的代码并提交了。然后就过去了。在此处输入图像描述

==================================================== ================
编辑:也许您应该改用“StringBuilder”(而不是StringBuffer)。我刚刚修复了 ide 中的所有警告,然后所有测试都通过了。

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Main {

    public static final String REG_EXP_CHAR_ONLY = "(?=.*?[a-zA-Z0-9 ])";

    public static String LongestWord(String sen) {

        StringBuilder strBuffer = new StringBuilder();
        for (String c : sen.split("")) {
            //System.out.println("c--------->" + c);
            if (isValid(c)) {

                strBuffer.append(c);

            }
        }
        
        return Arrays.stream(strBuffer.toString().split(" ")).max(Comparator.comparingInt(String::length))
                .orElse(null);
    }

    public static boolean isValid(String c) {
        // System.out.println("char -->" + c);
        Pattern pattern = Pattern.compile(REG_EXP_CHAR_ONLY);
        Matcher matcher = pattern.matcher(c);
        // System.out.println("Match found");
        return matcher.find();
    }

  public static void main (String[] args) {  
    // keep this function call here     
    Scanner s = new Scanner(System.in);
    System.out.print(LongestWord(s.nextLine())); 
  }

}

在此处输入图像描述


推荐阅读