题目描述
小易喜欢的单词具有以下特性:
1.单词每个字母都是大写字母
2.单词没有连续相等的字母
3.单词没有形如“xyxy”(这里的x,y指的都是字母,并且可以相同)这样的子序列,子序列可能不连续。
例如:
小易不喜欢"ABBA",因为这里有两个连续的'B'
小易不喜欢"THETXH",因为这里包含子序列"THTH"
小易不喜欢"ABACADA",因为这里包含子序列"AAAA"
小易喜欢"A","ABA"和"ABCBA"这些单词
给你一个单词,你要回答小易是否会喜欢这个单词。
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 }
法二(借鉴):正则表达式,厉害了。不过看都看不懂,先留着。代码如下(耗时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 }