C语言题解字符串变形算法示例
作者:吴尼玛
这篇文章主要为大家介绍了C语言题解字符串变形的方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
题引
对于一个长度为 n 字符串,我们需要对它做一些变形。
首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。
比如"Hello World"变形后就变成了"wORLD hELLO"。需要考虑字符串结尾是空格的情况。
数据范围: 1≤n≤10^6106 , 字符串中包括大写英文字母、小写英文字母、空格。
进阶:空间复杂度 O(n) , 时间复杂度 O(n)
题目保证给定的字符串均由大小写字母和空格构成。
示例1.
输入:
"This is a sample",16返回值:
"SAMPLE A IS tHIS"
示例2.
输入:
"This is a sample ",17返回值:
" SAMPLE A IS tHIS"
示例3.
输入:
"iOS",3返回值:
"Ios"
思路
解答代码的思路:先按空格分割字符串,将分割后的字符串存入栈中,根据栈的特点,后面的单词会先弹出,最后将出栈的字符串反转大小写后拼接成返回的字符串中。
写法会更简单的思路:是先遍历整个字符串来反转大小写。然后分割字符串,入栈,出栈,拼接字符串。
还有双逆转的思路:也是先遍历整个字符串来反转大小写。然后先逆转一次整个字符串,再以空格为界逆转每个单词的字符串。
解答代码
#include <string> #include <stack> class Solution { public: /** * @param s string字符串 * @param n int整型 * @return string字符串 */ string trans(string s, int n) { // write code here string res; res.reserve(n); stack<string> strs; string tmp; for (int i = 0; i < n; i++) { char c = s[i]; if (c != ' ') { tmp.push_back(c); } else { // 将空格隔开的字符串入栈 strs.push(tmp); tmp.clear(); } // 字符串结尾没有空格,要将最后一个找到的字符串入栈 if (i == n-1 && !tmp.empty()) { strs.push(tmp); } } // 排除结尾空格的特殊情况 if (s[n - 1] == ' ') { res.push_back(' '); } while (!strs.empty()) { // 将找到的字符串一个个出栈 auto cur = strs.top(); strs.pop(); // 转换大小写 for (int i = 0; i < cur.size(); i++) { char c = cur[i]; // 65~90为26个大写英文字母,97~122号为26个小写英文字母,两者相差32 char new_char = c >= 'a' && c <= 'z' ? c - 32 : c + 32; cur[i] = new_char; } res.append(cur); if (strs.size() > 0) { res.push_back(' '); } } return res; } };
以上就是C语言题解字符串变形方法示例的详细内容,更多关于C语言题解字符串变形的资料请关注脚本之家其它相关文章!