我在Python部分的codingbat.com上发现了这个问题。问题的标题是: String-2 > count_code。
返回字符串"code“在给定字符串中任何位置出现的次数,但我们将接受”d“的任何字母,因此"cope”、"cooe“、"coze”等都会计算在内。,但"co5e“、"co)e”等不算在内,因为'd‘索引中只允许一个字母。
我用粗体加了这个部分(不是在原来的问题中)。我想知道是否有一种简短的方法来编写代码,而不列出所有的字母。我的代码目前看起来如下:
def count_code(string):
count = 0
for i in range(len(string) - 3):
if string[i:i+2] == "co" and (string[i+2] == "a" or string[i+2] == "b" or str[i+2] == "c" or str[i+2] == "d" or str[i+2] == "e" or #you get the idea) and str[i+3] == "e":
count += 1
return count 我希望这是解释性的。链接到原来的问题是:https://codingbat.com/prob/p186048,我会感谢所有的答案。
发布于 2018-12-19 05:38:19
也许这段代码会有帮助:
def count_code(str):
i, ans = 0, 0
while i < len(str) - 3:
if str[i:i+2] == 'co' and str[i+3] == 'e':
# the catch
if str[i+2] >= 'a' and str[i+2] <= 'z':
i += 4
ans += 1
else:
i += 1
else:
i += 1
return ans我建议你不要问任何问题,从竞争的编程站点上的堆栈溢出,这个平台完全是为了不同的目的。
发布于 2018-12-19 05:30:15
编辑:原始问题链接不允许导入,因此不能使用re模块。请参阅Jarvis的解决方案,以使其与该特定的网站工作。然而,使用regex是解决此类问题的首选方法,因此我将在这里留下这个答案。
对于需要这种模式匹配的问题,您应该使用正则表达式。这是官方文档中的RegEx如何,但是您可以在网上找到许多教程。
解决这个问题所需的表达是非常基本的,因为这些问题是为了帮助您学习,所以请您自己尝试之后再看下面的答案。
‘create’您将使用上面的内容创建一个模式,然后调用输入字符串上的
findall方法。这将返回一个匹配列表,因此匹配的数量将为len(resultlist)。
发布于 2018-12-19 05:49:12
这段代码通过了所有测试。
def count_code(str):
n = len(str)
if n <= 3:
return 0
count = 0
for i in range(n - 3):
temp = str[i: i + 4]
if temp[0:2] == 'co':
if (ord(temp[2]) >= ord('a') and ord(temp[2]) <= ord('z')) or (ord(temp[2]) >= ord('A') and ord(temp[2]) <= ord('Z')):
if temp[3] == 'e':
count += 1
return count我已经使用ascii值来检查第三个字符。
https://stackoverflow.com/questions/53845014
复制相似问题