问题描述
分析
该题输入的字符串长度范围是[1,1000],因此该字符串至少会占一行。所以这里可以定一个变量来记录放置字符串的行数,变量初始值设置位1。定义一个静态变量来表示每行的最大宽度即100。遍历出字符串的每个字符将其减去'a'的ASCLL码便是其对应的widths数组的下标,在遍历中将每个字符的width相加起来表示当前行的宽度,如果结果大于100则意味着要换行了。此时记录行数的变量应该加一。换行之后,当前行的宽度也应该重置。
代码实现
class Solution {
public static final int MAX_WIDTH = 100;
public static int[] numberOfLines(int[] widths, String s) {
int row = 1,width = 0;
for (int i = 0; i <s.length(); i++) {
int needUnit = widths[s.charAt(i) - 'a']; //当前字符需要的宽度单位
width += needUnit; //将各个字符需要的宽度相加起来,表示当前行字符已占的宽度
if (width > MAX_WIDTH) { //如果大于最大宽度则换行,行数加一
row++;
width = needUnit; //并且将当前行的宽度重置为第一个字符的宽度
}
}
return new int[]{row,width};
}
}