Python - 确定单词是否使用此语言

时间:2014-03-15 23:43:27

标签: python

我在解决这个家庭作业问题上遇到了麻烦。 如果有人可以给我任何提示或什么开始,那将是伟大的! 提前谢谢!

Bob和Joe决定创建一种新语言。他们语言中的单词只包含字母A,B和C.他们发明的第一个单词是AB和C.然后他们决定所有其他单词的形式是AuB或vCw,其中u,v和w都是以前发明过的话。 (注意v和w可能是同一个单词。) 编写一个消耗字符串s的函数in_language,如果s在语言中则生成True,否则生成False。

示例:

in_language('C') => True
in_language('AB') => True
in_language('ACB') => True
in_language('ABCAB') => True
in_language('ACBCABCAB') => True

in_language('') => False (empty string with length 0)
in_language('A') => False
in_language('A^BD%AB') => False
in_language('BCA') => False
in_language('ACBACB') => False

1 个答案:

答案 0 :(得分:4)

这是一个简单的递归算法:

  1. 如果单词为空,则返回False
  2. 如果单词是AB或C则返回True
  3. 如果一个单词以A开头并以B结尾,如果内部部分是有效单词(递归),则返回True
  4. 对于单词中的每个字母C,如果左侧部分和右侧部分都是有效单词(递归),则返回True
  5. 如果上述情况均属实,则返回false
  6. 以下是SwankyLegg

    提出的实施方案
    def in_language(word):
        if word in ('AB', 'C'):
            return True
        if len(word) < 3: #The only valid words with 2 or less letters are AB and C
            return False
        if word[0] == 'A' and word[-1] == 'B' and in_language(word[1:-1]):
            return True
        else:
            for i, letter in enumerate(word):
                if letter == 'C' and in_language(word[:i]) and in_language(word[i+1:]):
                    return True
        return False