【面试笔试算法】牛客网一站通Offer编程题2016.4.19

本文详细解析了牛客网上的一站通Offer编程题,包括字符串变形的线性时间处理、地域划分的最优化策略、树上最长单色路径的动态规划解法以及串珠子的游戏策略分析。通过实例和代码解释了每个问题的解决思路和关键点。
摘要由CSDN通过智能技术生成

牛客网一站通offer

(一)字符串变形

1. 题目:

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

输入描述:

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

输出描述:

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

输入例子:

“This is a sample”,16

输出例子:

“SAMPLE A IS tHIS”

2. 解题

这道题看上去不是很难,可是很多边界问题 需要考虑。
比如:##this#is#a#sample## 返回 ##SAMPLE#A#IS#THIS##,而不是SAMPLE#A#IS#THIS。(Tips:#代表空格)
本题的思路:首先将字符串大小写进行替换,然后反转整个字符串,最后反转每个单词,其他的不改变。
Accepted代码:

    class Transform {
    public:
        string trans(string s, int n) {
            // write code here
            //大小写替换
            for(int i = 0 ; i < n ;i++){
                if(s[i]>='a'&&s[i]<='z'){
                    s[i] = toupper(s[i]);
                }
                else if(s[i]>='A'&&s[i]<='z'){
                    s[i] = tolower(s[i]);
                }
            }
            //反转整个字符串
            reverse(s.begin(),s.end());
            auto pbegin = s.begin();
            auto pend = s.begin();
            while(*pend!='\0'){
                if(*pend == ' '){
                    
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值