竖直打印单词--暴力模拟的思路

0x01.问题

给你一个字符串 s。请你按照单词在 s 中的出现顺序将它们全部竖直返回。

单词应该以字符串列表的形式返回,必要时用空格补位,但输出尾部的空格需要删除(不允许尾随空格)。

每个单词只能放在一列上,每一列中也只能有一个单词。

输入示例:s = “CONTEST IS COMING”
输出示例:[“CIC”,“OSO”,“N M”,“T I”,“E N”,“S G”,“T”]
提示:1 <= s.length <= 200 题目数据保证两个单词之间只有一个空格

0x02.暴力模拟

首先看到题目,应该先注意一下数据大小,一看,200,说明,这个题目肯定不限制复杂度,所以,先不考虑时间和空间的维度,先想尽办法把这个题目模拟出来。

模拟的思路:(题目怎么做,代码怎么写

  • 把所有单词单独拿出来放一个字符串数组。
  • 遍历得到原字符串的单词最大长度,因为这就是结果数组的长度。
  • 按照竖直的方法,依次从单词数组里拿出值往结果数组里放。
  • 如果单词的长度小于最长单词的长度,就用空格补,这也是题目中补的体现。
  • 最后,如果结果数组中有字符串末尾有空格,删除空格,这也是题目中末尾不能有空格的体现。

0x03.暴力模拟代码

class Solution {
public:
    vector<string> printVertically(string s) {
        vector<string> table;
        int i,j=0,maxj=0,k;
        for(i=0;i<s.size();i++){
            string a="";
            if(i==s.size()-1||s[i+1]==' '){
                for(k=i-j;k<=i;k++){
                    a+=s[k];
                }
                table.push_back(a);
                maxj=max(j+1,maxj);
                j=0;
                continue;
            }
            if(s[i]!=' ') j++;
        }
        vector<string> result(maxj,"");
        for(i=0;i<result.size();i++){
            for(k=0;k<table.size();k++){
                if(table[k].size()<=i) result[i]+=" ";
                else result[i]+=table[k][i];
            }
            while(result[i].back()==' ')  result[i].pop_back();
        }     
        return result;
    }
};

具体的细节久看基本功了。

然后事实是这样的:
在这里插入图片描述
说明,只要题目数据量不是很大,放心的去模拟吧!!!

ATFWUS  --Writing  By 2020–03–19

  • 22
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ATFWUS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值