leetcode-806-Number of Lines To Write String

题目描述:

We are to write the letters of a given string S, from left to right into lines. Each line has maximum width 100 units, and if writing a letter would cause the width of the line to exceed 100 units, it is written on the next line. We are given an array widths, an array where widths[0] is the width of 'a', widths[1] is the width of 'b', ..., and widths[25] is the width of 'z'.

Now answer two questions: how many lines have at least one character from S, and what is the width used by the last such line? Return your answer as an integer list of length 2.

Example :
Input: 
widths = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
S = "abcdefghijklmnopqrstuvwxyz"
Output: [3, 60]
Explanation: 
All letters have the same length of 10. To write all 26 letters,
we need two full lines and one line with 60 units.
Example :
Input: 
widths = [4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
S = "bbbcccdddaaa"
Output: [2, 4]
Explanation: 
All letters except 'a' have the same length of 10, and 
"bbbcccdddaa" will cover 9 * 10 + 2 * 4 = 98 units.
For the last 'a', it is written on the second line because
there is only 2 units left in the first line.
So the answer is 2 lines, plus 4 units in the second line.

Note:

  • The length of S will be in the range [1, 1000].
  • S will only contain lowercase letters.
  • widths is an array of length 26.
  • widths[i] will be in the range of [2, 10].

要完成的函数:

vector<int> numberOfLines(vector<int>& widths, string S) 

说明:

1、这道题给定一个由字母组成的字符串和一个vector,vector长度为26,写着26个英文字母的宽度。要求把string中的字母写出来,按照vector中的长度写出来。

每一行最多只能有100个宽度,如果最后装不下了,那么就要写到第二行。

比如已经有了98个宽度了,现在要再写一个'a',‘a’的宽度为4,那么这时就必须写到第二行,第一行剩下两个宽度,第二行拥有四个宽度。

要求写出string中的所有字母,返回一共有多少行,和最后一行的宽度。

2、题意清晰,这道题也就变得异常容易了。

代码如下:

    vector<int> numberOfLines(vector<int>& widths, string S) 
    {
        int s1=S.size(),sum=0,row=0;//sum记录每一行的宽度,row记录行数
        for(int i=0;i<s1;i++)
        {
            sum+=widths[S[i]-'a'];
            if(sum>100)
            {
                sum=widths[S[i]-'a'];//初始化下一行的宽度
                row++;
            }
        }
        return {row+1,sum};
    }

实测2ms,beats 100% of cpp submissions。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术墨客

React 深入说明JSX语法与Props特性

我们可以将JSX理解为React.createElement(component, props, ...children)方法的语法糖。JSX的代码:

11230
来自专栏柠檬先生

jquery属性值选择器

$("[attribute|='value']") 选择指定属性值等于给定字符串或改字符串为前缀(该字符串后跟一个连字符“-”)的元素。 attribut...

23160
来自专栏前端知识分享

第71天:jQuery基本选择器(二)

9420
来自专栏老马寒门IT

04-老马jQuery教程-DOM节点操作及位置和大小

DOM时代我们通过document的createElement方法动态创建标签。创建标签后,动态的给他添加属性。例如代码:

22900
来自专栏Pythonista

Golang之fmt格式“占位符”

16330
来自专栏行者常至

007.golang 切片slice

11730
来自专栏技术墨客

React学习(4)——深入说明JSX与props

我们可以将JSX理解为React.createElement(component, props, ...children)方法的语法糖。JSX的代码:

7520
来自专栏Unity Shader

Shader初学笔记:简单参数传入随机颜色

float4 vertex : POSITION;

499120
来自专栏gaoqin31

jQuery源码浅析

如果说php是世界上最好的语言,那么javascript无疑可以称为世界上最飘逸的语言,最近看了下jQuery的源码,实现了一个简陋的jQuery。我觉得要看懂...

23930
来自专栏Golang语言社区

Go语言创建、初始化数组的各种方式

//数组初始化的各种方式 func arraySliceTest0201() { //创建数组(声明长度) var array...

41270

扫码关注云+社区

领取腾讯云代金券