LeetCode题解C++生成每种字符都是奇数个的字符串
目录
- 题目描述
- 整理题意
- 解题思路分析
- 具体实现
- 复杂度分析
- 代码实现
- 总结
题目描述
给你一个整数 n
,请你返回一个含 n
个字符的字符串,其中每种字符在该字符串中都恰好出现 奇数次 。
返回的字符串必须只含小写英文字母。如果存在多个满足题目要求的字符串,则返回其中任意一个即可。
提示:
1 <= n <= 500
示例 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"
整理题意
题目要求我们构造一个长度为 n
的字符串,且字符串中每个字符出现的次数都为奇数次。
题目规定字符串中的字符必须都是小写字母,因为答案不唯一,所以返回任意一个都是可以的。
解题思路分析
由于题目仅要求字符串中的字符都要出现奇数次,那么我们可以直接 分类讨论:
- 当
n
为奇数时,我们直接构造n
个相同的任意小写字母即可。 - 当
n
为偶数时,我们可以直接构造n - 1
个相同的任意小写字母,然后在末尾添加一个与前面不同的任意一个小写字母即可。
具体实现
在构造长度为 n 的字符串时,我们可以直接使用构造函数:string(size_type length, char ch)
,表示构造长度为 length
的字符串,字符串中每个字符都为 ch
,也就是 length
个 ch
构成的字符串。
写成 string s(n, c);
表示字符串 s
为 n
个 'c'
构成的字符串(s = "ccc...ccc"
),而 string(n, c);
是直接返回 n
个 'c'
构成的字符串("ccc...ccc"
)。
我们还可以直接通过 while
循环来实现构造:while(ans.length() < n) ans += 'c';
复杂度分析
- 时间复杂度:O(n)。
- 空间复杂度:O(1)。这里不计入返回值需要的空间。
代码实现
class Solution { public: string generateTheString(int n) { // string(size_type length, char ch); // 以length为长度的ch的拷贝(即length个ch) if(n & 1) return string(n, 'a'); else return string(n - 1, 'a') + 'b'; } };
总结
- 该题较为简单,仅需分类讨论然后直接构造即可,分为构造长度为奇数和偶数两种情况。
- 该题所新学到的构造函数:
string(size_type length, char ch)
,表示length
个ch
构成的字符串。同时还可以在声明字符串时用到,例如:string s(length, ch);
,这就表示构造的字符串赋值到一个变量s
上了。
测试结果:
以上就是LeetCode题解C++生成每种字符都是奇数个的字符串的详细内容,更多关于C++奇数字符串的资料请关注我们其它相关文章!
相关推荐
-
C++超详细讲解字符串类
目录 一.历史遗留问题 二.解决方案 三.标准库中的字符串类 四.字符串循环右移 五.小结 一.历史遗留问题 C 语言不支持真正意义上的字符串 C 语言用字符数组和一组函数实现字符串操作 C 语言不支持自定义类型,因此无法获得字符串类型 二.解决方案 从 C 到 C++ 的进化过程引入了自定义类型 在 C++ 中可以通过类完成字符串类型的定义 三.标准库中的字符串类 C++ 语言直接支持 C 语言的所有概念 C++ 语言中没有原生的字符串类型 C++ 标准库提供了 string 类型 strin
-
在C++中把字符串转换为整数的两种简单方法
目录 C++中的数据类型 如何在C++中声明和初始化 int s 如何在C++中声明和初始化 string s 如何使用 stoi() 函数将字符串转换为int 如何使用stringstream 类将一个字符串转换为一个int 总结 当你用C++编码时,经常会有这样的时候,你会想把一种数据类型转换为另一种. 在这篇文章中,你将看到两种最流行的方法来学习如何在C++中把字符串转换为整数. 让我们开始吧! C++中的数据类型 C++编程语言有一些内置的数据类型. int,用于整数(整数)(例如10,
-
Java C++题解leetcode字符串轮转KMP算法详解
目录 题目要求 思路一:双指针(模拟) Java C++ 思路二:子串 手写KMP Java dp C++ dp 调API Java C++ 总结 题目要求 思路一:双指针(模拟) Java class Solution { public boolean isFlipedString(String s1, String s2) { if (s1.length() != s2.length()) return false; int n = s1.length(); if (n == 0) retu
-
C++中string字符串分割函数split()的4种实现方法
目录 一.使用stringstream流 二.使用string类提供的find方法与substr方法 三.使用C库函数strtok 四.使用regex_token_iterator(正则表达式) 总结 如: string str1 = "This is a test"; string str2 = "This-is-a-test"; string str2 = "This+is+a+test"; 我们如何将以上字符串按照某种分隔符( ,-,+),
-
基于C++实现去除字符串头尾指定字符功能
目录 一.从头部开始去除指定字符 二.去除尾部指定的字符 三.测试比较 编程时我们经常需要对字符串进行操作,其中有一项操作就是去除字符串的头(尾)指定的字符,比如空格.通常我们会使用封装好的库函数或者类函数的Trim方法来实现,如果自己动手写一个TrimHead和TrimTail函数该如何实现呢? 本文针对字符串头(尾)部指定的字符的去除,分别给出两个实现方法.并分别比较一下改进后的性能如何? 一.从头部开始去除指定字符 首先从头遍历,直到遇见第一个非指定字符,此后将后续字符按顺序逐一前移. /
-
C++11实现字符串分割的示例
C++11 字符串分割代码示例如下,很显然, 使用了C++11 特性,代码简洁好多 #include <iostream> #include <string> #include <vector> #include <regex> using namespace std; //没有使用C++11特性 vector<string> testSplit(string srcStr, const string& delim) {
-
C++实现字符串切割的两种方法
目录 字符串切割的两种方法 1.通过stl实现 2.通过使用strtok()函数实现 字符串分割&类型转换(string->double) 字符串切割的两种方法 字符串切割的使用频率还是挺高的,string本身没有提供切割的方法,但可以使用stl提供的封装进行实现或者通过c函数strtok()函数实现. 1.通过stl实现 涉及到string类的两个函数find和substr: 1.find函数 原型:size_t find ( const string& str, size_t p
-
LeetCode题解C++生成每种字符都是奇数个的字符串
目录 题目描述 整理题意 解题思路分析 具体实现 复杂度分析 代码实现 总结 题目描述 题目链接:1374. 生成每种字符都是奇数个的字符串 给你一个整数 n,请你返回一个含 n 个字符的字符串,其中每种字符在该字符串中都恰好出现 奇数次 . 返回的字符串必须只含小写英文字母.如果存在多个满足题目要求的字符串,则返回其中任意一个即可. 提示: 1 <= n <= 500 示例 1: 输入:n = 4输出:"pppz"解释:"pppz" 是一个满足题目要求
-
C++实现leetcode(3.最长无重复字符的子串)
[LeetCode] 3. Longest Substring Without Repeating Characters 最长无重复字符的子串 Given a string, find the length of the longest substring without repeating characters. Example 1: Input: "abcabcbb" Output: 3 Explanation: The answer is "abc", wit
-
C C++算法题解LeetCode1408数组中的字符串匹配
目录 题目描述 整理题意 解题思路分析 优化 具体实现 复杂度分析 代码实现 暴力 暴力 + 优化 KMP 总结 题目描述 题目链接:1408. 数组中的字符串匹配 给你一个字符串数组 words ,数组中的每个字符串都可以看作是一个单词.请你按 任意 顺序返回 words 中是其他单词的子字符串的所有单词. 如果你可以删除 words[j] 最左侧和/或最右侧的若干字符得到 word[i] ,那么字符串 words[i] 就是 words[j] 的一个子字符串. 提示: 示例 1: 输入:wo
-
Go语言LeetCode题解937重新排列日志文件
目录 一 题目描述 二 分析 三 答案 一 题目描述 937. 重新排列日志文件 - 力扣(LeetCode) (leetcode-cn.com) 给你一个日志数组 logs.每条日志都是以空格分隔的字串,其第一个字为字母与数字混合的 标识符 . 有两种不同类型的日志: 字母日志:除标识符之外,所有字均由小写字母组成 数字日志:除标识符之外,所有字均由数字组成 请按下述规则将日志重新排序: 所有 字母日志 都排在 数字日志 之前. 字母日志 在内容不同时,忽略标识符后,按内容字母顺序排序:在内容
-
Go语言leetcode题解953验证外星语词典示例详解
目录 题目描述 思路分析 AC 代码 题目描述 953. 验证外星语词典 某种外星语也使用英文小写字母,但可能顺序 order 不同.字母表的顺序(order)是一些小写字母的排列. 给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的单词在这种外星语中按字典序排列时,返回 true:否则,返回 false. 示例 1: 输入:words = ["hello","leetcode"], order = "hlabcdefgi
-
详解C++中的ANSI与Unicode和UTF8三种字符编码基本原理与相互转换
目录 1.概述 2.Visual Studio中的字符编码 3.ANSI窄字节编码 4.Unicode宽字节编码 5.UTF8编码 6.如何使用字符编码 7.三种字符编码之间的相互转换(附源码) 7.1.ANSI编码与Unicode编码之间的转换 7.2.UTF8编码与Unicode编码之间的转换 7.3.ANSI编码与UTF8编码之间的转换 8.Windows系统对使用ANSI窄字节字符编码的程序的兼容 9.字符编码导致程序启动失败的案例 1.概述 在日常的软件开发过程中,会时不时地去处理不同
-
Go语言LeetCode题解706设计哈希映射
目录 题目描述 思路分析 AC 代码 题目描述 706. 设计哈希映射 不使用任何内建的哈希表库设计一个哈希映射(HashMap). 实现 MyHashMap 类: MyHashMap() 用空映射初始化对象 void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) .如果 key 已经存在于映射中,则更新其对应的值 value . int get(int key) 返回特定的 key 所映射的 value :如果映射中不包含 key
-
go语言LeetCode题解720词典中最长的单词
目录 一 描述 二 分析 三 答案 四 总结 一 描述 720. 词典中最长的单词 - 力扣(LeetCode) (leetcode-cn.com) 给出一个字符串数组 words 组成的一本英语词典.返回 words 中最长的一个单词,该单词是由 words 词典中其他单词逐步添加一个字母组成. 若其中有多个可行的答案,则返回答案中字典序最小的单词.若无答案,则返回空字符串. 示例 1: 输入:words = ["w","wo","wor",&
-
Go语言LeetCode题解961在长度2N的数组中找出重复N次元素
目录 题目描述 思路分析 AC 代码 题目描述 961. 在长度 2N 的数组中找出重复 N 次的元素 给你一个整数数组 nums ,该数组具有以下属性: nums.length == 2 * n. nums 包含 n + 1 个 不同的 元素 nums 中恰有一个元素重复 n 次 找出并返回重复了 n 次的那个元素. 示例 1: 输入:nums = [1,2,3,3] 输出:3 示例 2: 输入:nums = [2,1,2,5,3,2] 输出:2 示例 3: 输入:nums = [5,1,5,
-
Go/C语言LeetCode题解997找到小镇法官
目录 题目描述 思路分析 go 代码 C语言 暴力法 题目描述 997. 找到小镇的法官 - 力扣(LeetCode) 小镇里有 n 个人,按从 1 到 n 的顺序编号.传言称,这些人中有一个暗地里是小镇法官. 如果小镇法官真的存在,那么: 小镇法官不会信任任何人. 每个人(除了小镇法官)都信任这位小镇法官. 只有一个人同时满足属性 1 和属性 2 . 给你一个数组 trust ,其中 trust[i] = [ai, bi] 表示编号为 ai 的人信任编号为 bi 的人. 如果小镇法官存在并且可
随机推荐
- Oracle数据库集复制方法浅议
- 详解Vue 实例中的生命周期钩子
- 用Shutdown命令实现网络统一关机
- java基于spring注解AOP的异常处理的方法
- Java的Hibernate框架中的双向主键关联与双向外键关联
- IE浏览器兼容Firefox的JS脚本的代码
- Python读取键盘输入的2种方法
- BootstrapValidator超详细教程(推荐)
- 添加一个以前写的table的spliter给大家
- 实现了基于TCP的Java Socket编程实例代码
- Linux上安装和卸载rpm软件包的方法
- SQLSERVER 创建索引实现代码
- Oracle数据库rownum和row_number的不同点
- javascript文本模板用法实例
- 浅谈JavaScript的Polymer框架中的事件绑定
- Windows服务器系统服务端口对照表
- Java创建类模式_动力节点Java学院整理
- APK包名修改 请问如何修改APK包名
- 用TensorFlow实现lasso回归和岭回归算法的示例
- video.js 实现视频只能后退不能快进的思路详解