📜  门| GATE-CS-2016(Set 1)|问题28(1)

📅  最后修改于: 2023-12-03 15:42:18.272000             🧑  作者: Mango

题目概述

这是2016年的GATE计算机科学和信息技术考试中的问题28。它要求程序员实现一个函数,该函数从一个字符串中删除一些字符,并返回剩余字符串。

函数形参

该函数有三个参数:

  1. 输入的字符串 s,类型为 string
  2. 删除的字符列表 t,类型为 string
  3. 目标字符串 p,类型为 string

函数返回值

该函数应该返回删除指定字符后的源字符串,如果删除所有字符后源字符串为空,则返回字符串"EMPTY".

程序实现

def delete_characters(s: str, t: str, p: str) -> str:
    d = {i: True for i in t}
    res = ''
    for c in s:
        if c not in d:
            res += c
    return res if len(res) > 0 else 'EMPTY'

在上面的函数的实现中,首先使用了一个字典将我们要删除的字符映射到 True,方便之后的判断。然后遍历字符串中的每个字符,如果当前字符不属于 t,就将其拼接到结果字符中。最后,将结果返回,如果结果字符为空则返回 "EMPTY"。

测试案例

我们可以使用以下测试案例来测试上述的函数实现:

def test_delete_characters():
    s1 = 'hello world'
    t1 = 'el'
    p1 = 'lowd'
    assert delete_characters(s1, t1, p1) == 'ho word'

    s2 = 'this is a test'
    t2 = 'aeiou'
    p2 = 'tt'
    assert delete_characters(s2, t2, p2) == 'ths s t tst'

    s3 = 'what is up'
    t3 = 'xyz'
    p3 = 'what is up'
    assert delete_characters(s3, t3, p3) == 'what is up'

    s4 = 'just letters'
    t4 = 'aeiou'
    p4 = ''
    assert delete_characters(s4, t4, p4) == 'jst lttrs'

    s5 = '123456789'
    t5 = '02468'
    p5 = '13'
    assert delete_characters(s5, t5, p5) == '13579'

    s6 = 'all g'
    t6 = 'all g'
    p6 = ''
    assert delete_characters(s6, t6, p6) == 'EMPTY'


test_delete_characters()

我们可以看到,上述函数已经通过了各种情况的测试。