力扣:1374. 生成每种字符都是奇数个的字符串

106 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第25天,点击查看活动详情

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

给你一个整数 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

问题解析

虽然乍一眼觉着这题很怪,但其实思索一下下就能发现这题十分简单,我们来分类讨论:

  • n是奇数时,我们直接用一个任意字符来构造字符串就行,这样这个字符就直接是出现了奇数次,满足条件;
  • n是偶数时,我们用n-1个相同的任意字符和1个其它字符来构造字符串,这样这两个字符都是出现了奇数次,满足条件;

AC代码

c++

class Solution {
public:
    string generateTheString(int n) {
        string s;
        if(n%2==1)
        {
            for(int i=0;i<n;i++)
            {
                s+='a';
            }
        }
        else if(n%2==0)
        {
            s+='b';
            for(int i=1;i<n;i++)
            {
                s+='a';
            }
        }
        return s;
    }
};

java

class Solution {
    public String generateTheString(int n) {
        StringBuilder sb = new StringBuilder();
        if (n % 2 == 0 && --n >= 0) sb.append('a');
        while (n-- > 0) sb.append('b');
        return sb.toString();
    }
}