携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情 >>
题目
给你一个整数 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为偶数时,可以只包含2种字符,其中一种字符的数量为1。当n为奇数时,只包含一种字符即可。这样,题目就很简单了!由于满足题意的字符串有很多种,我们只需要返回其中一个字符串即可。
解答
方法一:分类讨论
借助临时数组。
/**
* @param {number} n
* @return {string}
*/
var generateTheString = function(n) {
let ans = new Array(n).fill('a').join('')
if ((n & 1) === 0) {
ans = ans.slice(0, ans.length - 1) + 'b'
}
return ans
}
// 执行用时:64 ms, 在所有 JavaScript 提交中击败了46.30%的用户
// 内存消耗:41.2 MB, 在所有 JavaScript 提交中击败了64.81%的用户
// 通过测试用例:103 / 103
复杂度分析:
- 时间复杂度:O(n)。
- 空间复杂度:O(n)。
方法二:分类讨论(优化)
没有使用临时数组,这里使用字符串拼接的方法。
/**
* @param {number} n
* @return {string}
*/
var generateTheString = function(n) {
let ans = ''
for (let i = 0; i < n; i++) {
ans += 'a'
}
if ((n & 1) === 0) {
ans = ans.slice(0, ans.length - 1) + 'b'
}
return ans
}
// 执行用时:56 ms, 在所有 JavaScript 提交中击败了88.89%的用户
// 内存消耗:40.9 MB, 在所有 JavaScript 提交中击败了94.44%的用户
// 通过测试用例:103 / 103
复杂度分析:
- 时间复杂度:O(n)。
- 空间复杂度:O(1)。