• 2017网易---小易喜欢的单词


    题目描述

    小易喜欢的单词具有以下特性:
    1.单词每个字母都是大写字母
    2.单词没有连续相等的字母
    3.单词没有形如“xyxy”(这里的x,y指的都是字母,并且可以相同)这样的子序列,子序列可能不连续。
    例如:
    小易不喜欢"ABBA",因为这里有两个连续的'B'
    小易不喜欢"THETXH",因为这里包含子序列"THTH"
    小易不喜欢"ABACADA",因为这里包含子序列"AAAA"
    小易喜欢"A","ABA"和"ABCBA"这些单词
    给你一个单词,你要回答小易是否会喜欢这个单词。

    输入描述:

    输入为一个字符串,都由大写字母组成,长度小于100

    输出描述:

    如果小易喜欢输出"Likes",不喜欢输出"Dislikes"
    示例1

    输入

    AAA

    输出

    Dislikes

    题目链接:https://www.nowcoder.com/practice/ca7b8af83e2f4ec1af2f23d6733223b5?tpId=85&tqId=29845&tPage=1&rp=1&ru=/ta/2017test&qru=/ta/2017test/question-ranking

    法一:四层for循环。对于三个规则,分别进行判定,因为数据不大,所以没有超时。o(n^4)。代码如下(耗时40ms):
     1 public class Main {
     2 
     3     public static void main(String[] args) throws IOException {
     4         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
     5         String line = in.readLine();
     6         int len = line.length();
     7         boolean flag = true;
     8         for(int i = 0; i < len; i++) {
     9             //验证第一个规则,大写字母
    10             if(line.charAt(i) < 'A' || line.charAt(i) > 'Z') {
    11                 flag = false;
    12                 break;
    13             }
    14             //验证第二个规则,没有连续相同的字符
    15             else if(i + 1 < len && line.charAt(i) == line.charAt(i + 1)) {
    16                 flag = false;
    17                 break;
    18             }
    19             for(int j = i + 1; j < len; j++) {
    20                 for(int t = j + 1; t < len; t++) {
    21                     for(int k = t + 1; k < len; k++) {
    22                         //验证第三个规则,没有THTH类似的子序列
    23                         if(line.charAt(i) == line.charAt(t) && line.charAt(j) == line.charAt(k)) {
    24                             flag = false;
    25                             break;
    26                         }
    27                     }
    28                     if(flag == false) {
    29                         break;
    30                     }
    31                 }
    32                 if(flag == false) {
    33                     break;
    34                 }
    35             }
    36             if(flag == false) {
    37                 break;
    38             }
    39         }
    40         if(flag == false) {
    41             System.out.println("Dislikes");
    42         }
    43         else {
    44             System.out.println("Likes");
    45         }
    46     }
    47 
    48 }
    View Code

    法二(借鉴):正则表达式,厉害了。不过看都看不懂,先留着。代码如下(耗时22ms):

     1 import java.io.BufferedReader;
     2 import java.io.IOException;
     3 import java.io.InputStreamReader;
     4 
     5 public class Main {
     6 
     7     public static void main(String[] args) throws IOException {
     8         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
     9         String line = in.readLine();
    10         if(isAllUpCase(line) && isConEql(line) && isThrEql(line))
    11             System.out.println("Likes");
    12         else
    13             System.out.println("Dislikes");
    14     }
    15         //条件1
    16     public static boolean isAllUpCase(String word){
    17        return word.matches("[A-Z]+");
    18     }
    19     //条件2
    20     public static boolean isConEql(String word){
    21        return !word.matches(".*(.)(\1).*");
    22     }
    23     //条件3
    24     public static boolean isThrEql(String word){
    25        return !word.matches(".*(.).*(.)(.*\1)(.*\2).*");
    26     }
    27 
    28 }
    View Code
  • 相关阅读:
    javascript 设计模式-----观察者模式
    javascript 设计模式-----工厂模式
    javascript 设计模式-----模块模式
    javascript 设计模式-----享元模式
    javascript 设计模式-----策略模式
    js操作Dom的一些方法简化
    Centos7下不删除python2.x的情况下安装python3.x
    解决:Linux SSH Secure Shell(ssh) 超时断开的解决方法
    shell变量常用方法
    apache目录别名
  • 原文地址:https://www.cnblogs.com/cing/p/8615257.html
Copyright © 2020-2023  润新知