华为OD机试E卷-最长方连续方波信号[200分] JAVA

简单的字符串匹配:

public class OJTest4 {
    public static void main(String[] args) {
        Scanner in =  new Scanner(System.in);
        String single = in.nextLine();
        System.out.println(findResult(single));
        System.out.println(findResult2(single));
    }

    private static String findResult(String single) {
        // 正则表达式模式,匹配完全连续交替的方波信号
        Pattern pattern = Pattern.compile("^(01)+0$");
        int maxLength = 0;
        String longestWare = "-1";
        StringBuilder currentWare =  new StringBuilder();
        for (char c : single.toCharArray()) {
            if (c == '0') {
                if (currentWare.length()>0 && currentWare.charAt(currentWare.length() - 1) == '0') {
                    if (pattern.matcher(currentWare).matches() && currentWare.length() > maxLength) {
                        maxLength = currentWare.length();
                        longestWare = currentWare.toString();
                    }
//                    currentWare = new StringBuilder();
//                    currentWare.setLength(0);  这三行都是把StringBuilder置为空
                    currentWare.delete(0,currentWare.length());
                }
            }
            currentWare.append(c);
        }
        //检查最后一个波形
        if (pattern.matcher(currentWare).matches() && currentWare.length() > maxLength) {
            longestWare = currentWare.toString();
        }
        return longestWare;
    }
    private static String findResult2(String single) {
        char[] singles = single.toCharArray();
        StringBuilder sb = new StringBuilder();
        int maxLength = 0;
        String result = "-1";
        Pattern pattern = Pattern.compile("^(01)+0$"); //^:表示匹配字符串的开头。(01)+:表示匹配一个或多个连续的01子串。0$:表示匹配以0结尾的字符串。
        for (int i = 0; i < singles.length; i++) {
            if (singles[i] == '0') {
                if (sb.length() > 0 && sb.charAt(sb.length() - 1) == '0') { //说明出现标志位00,之前加入的sb的字符串可以构成一个信号串
                    if (pattern.matcher(sb).matches() && sb.length() > maxLength) {
                        result = sb.toString();
                        maxLength = sb.length();
                    }
                    sb.setLength(0);
                }
            }
            sb.append(singles[i]);
        }
        //尾部的波形结尾是10,不存在下一个0来让他进入上述的匹配判断里,所以得在这里判断一次。
        if (pattern.matcher(sb).matches() && sb.length() > maxLength) {
            result = sb.toString();
            maxLength = sb.length();
        }

        return result;
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务