牛客网算法之字符串变形

面试中遇到了一个题目:『字符串变形』,后面发现是牛客网原题。

题目描述:

对于一个给定的字符串,我们需要在线性(也就是O(n))的时间里对它做一些变形。首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把着个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。比如"Hello World"变形后就变成了"wORLD hELLO"。

输入描述

给定一个字符串s以及它的长度n(1≤n≤500)

输出描述

请返回变形后的字符串。题目保证给定的字符串均由大小写字母和空格构成。

示例1
输入

“This is a sample”,16

输出

“SAMPLE A IS tHIS”

一个不那么快,能解决问题的方法:

class Solution {
public:
    string trans(string str, int n) 
    {
        // write code here
        string temp;
        vector<string> vec;
        //分词 & 变换
        for(int i = 0; i <= n; ++i)
        {
            if(i < n && str[i] != ' ')
            {
                if(str[i] >= 'A' && str[i] <= 'Z')
                    temp += (str[i] - 'A' + 'a');
                else if(str[i] >= 'a' && str[i] <= 'z')
                    temp += (str[i] - 'a' + 'A');
                else
                    temp += str[i];
            }else
            {
                vec.push_back(temp);
                temp.clear();
            }
        }
        
        string str_ret;
        //这里也可以借助stack来实现逆置
        for(auto it = vec.rbegin(); it != vec.rend(); )
        {
            str_ret += *it;
            if(++it != vec.rend())
                str_ret += " ";          
        }
        
        return str_ret;
    }
};

即通过两步完成:

  • step1. 删除空格, 大小写转换,并加入vector容器
  • step2. 通过逆向迭代器,遍历vector,输出结果

这里是直接逆向迭代器就可以访问,然后在最后一个元素时不用处理空格,通过判断边界就可以进行处理。当然了,也可以借助栈的特性,实现逆向输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值