生成每种字符都是奇数个的字符串

标签: 字符串

难度: Easy

给你一个整数 n,请你返回一个含 n 个字符的字符串,其中每种字符在该字符串中都恰好出现 奇数次

返回的字符串必须只含小写英文字母。如果存在多个满足题目要求的字符串,则返回其中任意一个即可。

示例 1:

输入:n = 4
输出:"pppz"
解释:"pppz" 是一个满足题目要求的字符串,因为 'p' 出现 3 次,且 'z' 出现 1 次。当然,还有很多其他字符串也满足题目要求,比如:"ohhh" 和 "love"。

示例 2:

输入:n = 2
输出:"xy"
解释:"xy" 是一个满足题目要求的字符串,因为 'x' 和 'y' 各出现 1 次。当然,还有很多其他字符串也满足题目要求,比如:"ag" 和 "ur"。

示例 3:

输入:n = 7
输出:"holasss"

提示:

  • 1 <= n <= 500

Submission

运行时间: 19 ms

内存: 16.0 MB

class Solution:
    def generateTheString(self, n: int) -> str:
        ch = ['a','b','c']
        if n == 1:
            return ch[0]
        if n % 2 == 0:
            return ch[0] * (n - 1) + ch[1]
        else:
            return ch[0] * (n - 2) + ch[1] + ch[2]

Explain

此题解的思路是使用三个字符a、b、c来构建满足条件的字符串。当n为1时,直接返回字符a;当n为偶数时,返回n-1个a和1个b,保证每个字符出现的次数为奇数;当n为奇数且大于1时,返回n-2个a、1个b和1个c,同样保证每个字符出现的次数为奇数。

时间复杂度: O(n)

空间复杂度: O(n)

class Solution:
    def generateTheString(self, n: int) -> str:
        ch = ['a','b','c']  # 定义三个字符a、b、c
        if n == 1:
            return ch[0]  # 当n为1时,直接返回字符a
        if n % 2 == 0:
            return ch[0] * (n - 1) + ch[1]  # 当n为偶数时,返回n-1个a和1个b
        else:
            return ch[0] * (n - 2) + ch[1] + ch[2]  # 当n为奇数时,返回n-2个a、1个b和1个c

Explore

当n为奇数且大于1时,如果只使用两个字符,例如n-1个a和1个b,这时a的数量为偶数,b的数量为奇数,不满足题目要求。因此,需要引入第三个字符c来调整字符数量,保证所有字符数量都为奇数。具体到n-2个a、1个b和1个c的组合,可以满足n为奇数时,所有字符数量均为奇数的要求。

在n为1时,只需要一个字符即可满足条件。对于n为偶数的情况,使用n-1个a和1个b的组合是简单且有效的方式,因为它直接利用偶数-1的奇数特性来保持字符a的出现次数为奇数,同时添加一个b使得字符串总长度为偶数n。在这种特定情况下,使用两个字符已经是最少的字符种类数目,无法进一步减少,因为单一字符的重复不能满足偶数长度且每种字符出现次数均为奇数的要求。

n为偶数时,n-1是一个奇数。这样,选择n-1个a意味着a字符出现了奇数次。在这种情况下,添加1个字符b(出现1次,也是奇数次),就可以维持字符串的总长度为原始的偶数n,同时保证了每种字符的出现次数均为奇数。这是一个简单而有效的策略,确保每种字符的出现次数满足题目要求。

此方法在n较大时仍然有效且高效。Python字符串操作具有较高的效率,且生成长度为500的字符串在现代计算机硬件上通常不会引发性能问题。Python的内存管理也足以应对这种规模的数据操作。因此,这种方法即便对于较大的n值,也是既有效又高效的。