力扣题目解析:生成奇数个字符的字符串的巧妙方法

力扣题目解析:生成奇数个字符的字符串的巧妙方法_第1张图片

本篇博客会讲解力扣“1374. 生成每种字符都是奇数个的字符串”的解题思路,这是题目链接。

力扣题目解析:生成奇数个字符的字符串的巧妙方法_第2张图片

这道题的解题思路很巧妙,它利用了字符串长度n的奇偶性:

  • 如果n是奇数,那么就把字符串全部填充为’a’,这样每种字符都是奇数个。
  • 如果n是偶数,那么就把字符串除了最后一个位置外都填充为’a’,最后一个位置填充为’b’,这样也能保证每种字符都是奇数个。

具体的实现方法是,先创建一个长度为n的全’a’的字符串,然后判断n是否是偶数,如果是,就把最后一个字符替换为’b’。

char * generateTheString(int n){
    char* ret = (char*)calloc(n+1, sizeof(char));
    memset(ret, 'a', n);

    // n为奇数,则n个a
    // n偶数,则n-1个a和1个b
    if (n % 2 == 0)
    {
        ret[n-1] = 'b';
    }

    return ret;
}

力扣题目解析:生成奇数个字符的字符串的巧妙方法_第3张图片

总结

本题的要求很灵活,只要返回一个满足条件的字符串即可,因此我们可以采用最简单的策略,根据字符串长度n的奇偶性来选择填充字符的方法,利用了这样一个规律:奇数=奇数(本身),偶数=奇数(-1)+奇数(+1)。

感谢大家的阅读!

你可能感兴趣的:(力扣刷题,leetcode,算法,职场和发展,c语言,开发语言)