📜  门| GATE CS 2021 |套装2 |第53章(1)

📅  最后修改于: 2023-12-03 14:58:21.362000             🧑  作者: Mango

门 | GATE CS 2021 |套装2 |第53章

本套装的第53章包括了以下题目:

  1. 把一个给定的字符串进行反转。
  2. 给定两个字符串s和t,判断s是否能够通过重新排列得到t。
  3. 编写一个函数,判断一个给定的字符串是否是回文字符串。
  4. 给定一个字符串和一个正整数k,将这个字符串重复k次并返回结果。
  5. 给定一个只包含小写字母的字符串s和一个正整数k,用字母的出现次数和相对顺序构建一个长度为k的新字符串。
反转字符串

题目描述:

给定一个字符串,编写一个函数将其反转并返回结果。

要求:

  • 不能使用现成的反转函数。

样例输入: "hello"

样例输出: "olleh"

解题思路:

可以使用头尾指针来遍历整个字符串,然后交换头尾指针所指向位置的字符。

代码:

def reverse_string(s:str) -> str:
    s = list(s)
    i, j = 0, len(s) - 1
    while i < j:
        s[i], s[j] = s[j], s[i]
        i += 1
        j -= 1
    return "".join(s)
重新排列字符串

题目描述:

给定两个字符串s和t,判断s是否能够通过重新排列得到t。

要求:

  • 忽略字符串的大小写。

样例输入: "anagram", "nagaram"

样例输出: True

解题思路:

首先可以统计s和t中每个字符出现的次数,然后比较这两个哈希表是否相同即可。

代码:

def is_anagram(s:str, t:str) -> bool:
    s_count = {}
    t_count = {}
    for c in s.lower():
        s_count[c] = s_count.get(c, 0) + 1
    for c in t.lower():
        t_count[c] = t_count.get(c, 0) + 1
    return s_count == t_count
判断回文字符串

题目描述:

给定一个字符串,编写一个函数判断它是否是回文字符串。

要求:

  • 忽略字符串中的空格和标点符号。
  • 忽略字符串的大小写。

样例输入: "A man, a plan, a canal: Panama"

样例输出: True

解题思路:

可以先将字符串中的空格和标点符号去掉,然后将字符串全部转换为小写并翻转,最后判断是否和原字符串相同即可。

代码:

def is_palindrome(s:str) -> bool:
    s = "".join(filter(str.isalnum, s)).lower()
    return s == s[::-1]
复制字符串

题目描述:

给定一个字符串和一个正整数k,将这个字符串重复k次并返回结果。

要求:

  • 不能使用现成的复制函数。

样例输入: "abc", 3

样例输出: "abcabcabc"

解题思路:

可以使用字符串乘法,将字符串复制k次然后使用join函数连接起来。

代码:

def copy_string(s:str, k:int) -> str:
    res = ""
    for i in range(k):
        res += s
    return res
构建字符串

题目描述:

给定一个只包含小写字母的字符串s和一个正整数k,用字母的出现次数和相对顺序构建一个长度为k的新字符串。

要求:

  • 如果字符串s中某个字母的出现次数大于k,则只使用k次。
  • 如果字符串s中某个字母的出现次数小于k,则使用这个字母的所有出现次数。
  • 新字符串中相同字母的相对顺序应与原字符串中相同字母的相对顺序相同。

样例输入: "abca", 3

样例输出: "aaabbbccc"

解题思路:

可以使用一个哈希表来统计每个字母出现的次数,然后遍历字符串构造新字符串。

代码:

def build_string(s:str, k:int) -> str:
    count = {}
    for c in s:
        count[c] = count.get(c, 0) + 1
    res = ""
    for c in s:
        if count[c] >= k:
            res += c*k
        else:
            res += c*count[c]
        count[c] = 0
    for c in count.keys():
        if count[c] > 0:
            res += c*count[c]
    return res

以上就是本套装的第53章所包括的所有题目。