Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-合并字符串检查器-代码战争_Python - Fatal编程技术网

Python-合并字符串检查器-代码战争

Python-合并字符串检查器-代码战争,python,Python,下面是一个简单的练习: 在一次求职面试中,你被要求编写一个算法来检查给定的字符串s是否可以由另外两个字符串part1和part2组成 第二部分。限制是第1部分和第2部分中的字符是 与s中的顺序相同。面试官会给你以下信息 示例并告诉您从给定的测试中找出其余部分 案例 例如: “codewars”是“cdw”和“oears”的合并: s:COODEWARS=代码战争 第1部分:cdw=cdw 第2部分:o e a r s=OEAR 好的,我的代码是: def is_merge(s, part1,

下面是一个简单的练习:

在一次求职面试中,你被要求编写一个算法来检查给定的字符串s是否可以由另外两个字符串part1和part2组成 第二部分。限制是第1部分和第2部分中的字符是 与s中的顺序相同。面试官会给你以下信息 示例并告诉您从给定的测试中找出其余部分 案例

例如:

“codewars”是“cdw”和“oears”的合并:

s:COODEWARS=代码战争

第1部分:cdw=cdw

第2部分:o e a r s=OEAR

好的,我的代码是:

  def is_merge(s, part1, part2):
      if len(s) != (len(part1) + len(part2)):
          return False
      l= list(s)
      p1=list(part1)
      p2=list(part2)
      l= sorted(l)
      result= p1+p2
      result= sorted(result)
      if result == l:
          return True
因此,55/66的结果是正确的,但在11个案例中存在以下特定错误:

下面是错误(我知道它们不够详细,但这就是codewars练习告诉我的)


有什么提示可以让我找出我在这段代码中写错了什么或者我没有添加什么吗?

顺序问题-执行
排序(l)
排序(结果)
会导致顺序被洗牌,从而导致顺序被破坏

如果我理解正确的话

限制是第1部分和第2部分中的字符顺序与s中的相同

这意味着您需要依次遍历
part1
part2

这就解释了为什么你会得到

无法从代码和wasr创建代码战


在函数的核心部分,您可以尝试如下循环:

part1_index = 0
part2_index = 0
for c in l:
    if part1_index < len(p1) and c == p1[part1_index]:
        part1_index += 1
    elif part2_index < len(p2) and c == p2[part2_index]:
        part2_index += 1
    else:
        return False

return True
part1\u索引=0
第2部分索引=0
对于l中的c:
如果第1部分索引
如前所述,字母顺序很重要。您可以使用
find
查找字符串中字符的第一个位置。此函数起作用,但如果所需单词具有重复字符,则会中断:

def is_merge(s, part1, part2):
    if len(s) != (len(part1) + len(part2)):
        return False

    # where are the characters in the desired string?
    part1_pos = [s.find(x) for x in part1]
    part2_pos = [s.find(x) for x in part2]

    # are they in order? i.e. does the position keep increasing? 
    part1_increases = [x < y for x,y in zip(part1_pos,part1_pos[1:])]
    part2_increases = [x < y for x,y in zip(part2_pos,part2_pos[1:])]

    # these prints will show you what is going on ...
    print(part1_pos,part1_increases)
    print(part2_pos,part2_increases)


    if all(part1_increases) and all(part2_increases):
        return True

    return False
def是合并的(s,第1部分,第2部分):
如果len(s)!=(第1部分)+第2部分):
返回错误
#所需字符串中的字符在哪里?
part1_pos=[s.find(x)表示part1中的x]
第2部分_pos=[s.find(x)表示第2部分中的x]
#它们整齐吗?i、 职位是否持续增加?
第1部分增加=[x
我刚刚通过添加一个“Else:return false”,修复了11个错误中的9个。但在“可以以错误的顺序处理字符”测试中,我仍然收到2个错误。如果索引到达p1或p2的末尾,则索引可能超出范围。
def is_merge(s, part1, part2):
    if len(s) != (len(part1) + len(part2)):
        return False

    # where are the characters in the desired string?
    part1_pos = [s.find(x) for x in part1]
    part2_pos = [s.find(x) for x in part2]

    # are they in order? i.e. does the position keep increasing? 
    part1_increases = [x < y for x,y in zip(part1_pos,part1_pos[1:])]
    part2_increases = [x < y for x,y in zip(part2_pos,part2_pos[1:])]

    # these prints will show you what is going on ...
    print(part1_pos,part1_increases)
    print(part2_pos,part2_increases)


    if all(part1_increases) and all(part2_increases):
        return True

    return False
def is_merge(s, s1, s2):
    for c in s:
        if s1.startswith(c):
            s1 = s1[1:]
        elif s2.startswith(c):
            s2 = s2[1:]
        else:
            return False
    else:
        if s1 or s2:           # still characters left in s1 or s2
            return False
    return True