首页 > 试题广场 >

小易喜欢的单词

[编程题]小易喜欢的单词
  • 热度指数:18523 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
小易喜欢的单词具有以下特性:
1.单词每个字母都是大写字母
2.单词没有连续相等的字母
3.单词没有形如“xyxy”(这里的x,y指的都是字母,并且可以相同)这样的子序列,子序列可能不连续。
例如:
小易不喜欢"ABBA",因为这里有两个连续的'B'
小易不喜欢"THETXH",因为这里包含子序列"THTH"
小易不喜欢"ABACADA",因为这里包含子序列"AAAA"
小易喜欢"A","ABA"和"ABCBA"这些单词
给你一个单词,你要回答小易是否会喜欢这个单词(只要不是不喜欢,就是喜欢)。

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


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

输入

AAA

输出

Dislikes
示例2

输入

AbAB

输出

Dislikes
示例3

输入

ABACADA

输出

Dislikes
示例4

输入

AEBFCEDF

输出

Dislikes
def second_pos(s, c):
    first_pos = s.find(c) return first_pos + s[first_pos+1:].find(c) + 1   s = input()
ch = list(set(list(s)))
n = len(ch)
flag = 1 for i in range(n):
    xi = s.find(ch[i])
    yi = second_pos(s, ch[i]) if s.count(ch[i]) >= 4:
        flag = 0  break  elif s.count(ch[i]*2) > 0:
        flag = 0  break  elif xi != yi: for j in range(i+1, n):
            xj = s.find(ch[j])
            yj = second_pos(s, ch[j]) if xj != yj and (xi - xj)*(yi - yj) > 0 and (xj - yi)*(yi - yj) > 0:
                flag = 0  break  if flag == 1: print('Likes') else: print('Dislikes')
发表于 2018-12-17 22:43:00 回复(0)
s = input()
n = len(s)
import re

def like(s, n):
    for i in range(n-1):
        if s[i] == s[i+1]:
            return False
        for j in range(i + 1, n-1):
            pattern = s[i] + ".*" + s[j]
            if re.search(r"%s"%pattern, s[j+1:]):
                return False
    return True
if like(s, n):
    print("Likes")
else:
    print("Dislikes")
发表于 2018-10-03 17:36:36 回复(0)
import re
pattern1 = r'^[A-Z]+$'
pattern2 = r'^[A-Z]*([A-Z])\1[A-Z]*$'
pattern3 = r'^[A-Z]*([A-Z])[A-Z]*([A-Z])[A-Z]*\1[A-Z]*\2[A-Z]*$'
try:
    while True:
        string = input()
        if not re.match(pattern1,string):
            print('Dislikes')
            break
        if re.match(pattern2,string):
            print('Dislikes')
            break
        if re.match(pattern3,string):
            print('Dislikes')
            break
        print('Likes')
except:
    pass

发表于 2018-09-29 16:53:45 回复(0)
用python做的简单版本,构造两个相同字符之间以及后面字符的集合,判断两个集合的交集是否为空
string = input() like = 1 for i in range(len(string)-1):     char = string[i]     if char == string[i+1]:         like = 0         print('Dislikes')         break     sec_idx = string.find(char, i+1)     while sec_idx != -1:         set_a = set(string[i+1:sec_idx])         set_b = set(string[sec_idx+1:])         if len(set_a & set_b) != 0:             like = 0             print('Dislikes')             break         sec_idx = string.find(char, sec_idx+1)     if not like:         break if like:     print("Likes")

发表于 2018-08-15 21:39:54 回复(0)
def islike(a):
    for i in range(len(a)-1):
        if a[i] == a[i+1]:
            return 'Dislikes'
    for k in range(len(a)-3):
        for j in range(k+1,len(a)-2):
            for index,v in enumerate(a[j+1:]):
                if v == a[k] and (a[j] in a[index+1+1+j:]):
                    return 'Dislikes'

    return 'Likes'

str_ = input()
print(islike(str_))

发表于 2018-07-31 11:30:24 回复(3)
def fun(word1,word2):
    for i in word1[1:]:
        if i in word2[1:]:
            return True
        
        
def islike(word):
    for i in range(len(word)):
        if 'A'> word[i] or word[i] > 'Z':
            return False
        if i!=0 and word[i] == word[i-1]:
            return False
    for i in range(len(word)-1):
        for j in range(i+1,len(word)):
            if word[j]!=word[i]:
                continue
            if fun(word[i:j],word[j:]):
                return False
    return True

word = raw_input()
if islike(word):
    print 'Likes'
else:
    print 'Dislikes'

发表于 2017-10-09 16:28:13 回复(0)
import re
item = input()
(.).*\1.*\2.*', item))
if re.match(r'[a-z]+', item) or re.match(r'.*(.)*\1.*', item) or re.match(r'.*(.).*(.).*\1.*\2.*', item):print("DisLikes")
else:print("Likes")
发表于 2017-09-09 11:28:50 回复(0)
import sys
import re

if __name__ == "__main__":
    pattern1 = re.compile(r"[^A-Z]+")
    pattern2 = re.compile(r"([A-Z])\1")
    pattern3 = re.compile(r"([A-Z])[A-Z]*([A-Z])[A-Z]*\1[A-Z]*\2")
    
    word = sys.stdin.readline()
    word = word.rstrip('\n')
    if pattern1.search(word) or pattern2.search(word) or pattern3.search(word):
        print("Dislikes")
    else:
        print("Likes")

直接使用 Python 中的正则表达式匹配,值得注意的是使用 readline 读取的行,默认包含有一个 '\n',必须把这个去掉,否则通过不了所有测试用例。

还有一个使用 C++11 的解答,但是 gcc 的版本必须在 4.9.0 以上才能正常编译运行,供大家参考
#include <iostream>
#include <regex>
#include <string>

using namespace std;

int main() {
  /*regex p1("[^A-Z]+"), p2("([A-Z])\\1"),
      p3("([A-Z])[A-Z]*([A-Z])[A-Z]*\\1[A-Z]*\\2");
  string word;
  while (cin >> word) {
    if (regex_search(word, p1) or regex_search(word, p2) or
        regex_search(word, p3)) {
      cout << "Dislikes\n";
    } else {
      cout << "Likes\n";
    }
  }*/

    regex r("([^A-Z]+|([A-Z])\\2|([A-Z])[A-Z]*([A-Z])[A-Z]*\\3[A-Z]*\\4)");
    string word;
    while(cin >> word){
        if (regex_search(word, r)){
            cout << "Dislikes\n";
        }
        else{
            cout << "Likes\n";
        }
    }
    
  return 0;
}

编辑于 2017-09-05 00:34:43 回复(5)
import re

s = raw_input()
f1 = re.findall(r'[^A-Z]', s)
f2 = re.findall(r'([A-Z])\1', s)
f3 = re.findall(r'([A-Z])+([A-Z])+\1+\2', s)

print 'Dislikes' if (f1 or f2 or f3) else 'Likes'

发表于 2017-08-15 00:41:02 回复(0)
import re
s=raw_input()
pattern1=re.compile('[A-Z]{%d}'%len(s))
pattern2=re.compile('.*(.)(\\1).*')
pattern3=re.compile('.*(.).*(.)(.*\\1)(.*\\2).*')
if re.match(pattern1,s)\
and not(re.match(pattern2,s))\
and not(re.match(pattern3,s)):
	print 'Likes'
else:
	print 'Dislikes'

#正则表达式

发表于 2017-08-14 14:28:58 回复(0)