美文网首页
每日一题——字符串变形

每日一题——字符串变形

作者: 拉普拉斯妖kk | 来源:发表于2023-08-08 21:47 被阅读0次

    题目


    对于一个长度为 n 字符串,我们需要对它做一些变形。

    首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。

    比如"Hello World"变形后就变成了"wORLD hELLO"。需要考虑字符串结尾是空格的情况。

    数据范围: 1≤n≤106 , 字符串中包括大写英文字母、小写英文字母、空格。

    进阶:空间复杂度 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;
        }
    };
    

    相关文章

      网友评论

          本文标题:每日一题——字符串变形

          本文链接:https://www.haomeiwen.com/subject/gqhopdtx.html