[模拟题]leetcode5316: 竖直打印单词(medium)

题目:
在这里插入图片描述
题解:

  • 模拟题
  • 第一步:利用istringstream分割字符串,然后找到最长单词的长度,这样可以就确定结果数组的大小了。
  • 第二步:还是利用istringstream分割单词,单词长度不足最长长度的在后面补空格。
  • 第三步:遍历res,删除每个单词尾部的空格。

代码如下:

class Solution {
public:
    vector<string> printVertically(string s) {
        istringstream str(s);
        string word;
        int length=0;
        //1、利用istringstream分割字符串来获得单词的最长长度
        while(str>>word){
            length=max(length,int(word.size()));
        }
        vector<string> res(length);
        istringstream str1(s);
        //2、利用istringstream分割字符串来添加单词,不够最长长度的补空格
        while(str1>>word){
            int size=word.size();
            for(int i=0;i<length;++i){
                if(i<size){
                    res[i].push_back(word[i]);
                }
                else{
                    res[i].push_back(' ');
                }
            }
        }
        //3、遍历res来删除每个单词的尾部的空格
        for(int i=0;i<length;++i){
            int j=res[i].size()-1;
            while(res[i][j]==' '&&j>=0){
                res[i].pop_back();
                j--;
            }
        }
        return res;
    }
};
发布了484 篇原创文章 · 获赞 149 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/qq_43152052/article/details/104045186