C++设计PDF查看器题目中maxheight计算逻辑疑问
PDF查看器编程题maxHeight获取逻辑解析
这个题的预设规则是:26个小写字母各有自定义的显示高度,要求计算给定字符串的高亮区域总面积,面积公式为「字符串长度 × 字符串中最高字符的高度」,你疑惑的最大高度获取逻辑拆解如下:
前置变量说明
heights[26]:按顺序存储a-z共26个小写字母的高度,下标0对应a的高度、下标1对应b的高度,以此类推str:待计算的输入字符串,所有字符均为小写字母- 代码里的变量
height就是你问的maxHeight,用来存当前遍历到的最大字符高度
最大高度计算逻辑逐行说明
- 初始化:
int height = -1
因为字母的高度一定是正整数,把初始值设为-1,保证第一个遍历到的字符高度肯定会替换掉初始值 - 遍历字符串逐一比对:
for(int i = 0; i < len; i++){ if(heights[str[i]-'a'] > height) height = heights[str[i]-'a']; }str[i]-'a':把字符转成对应heights数组的下标,比如字符是c的话,'c'-'a'等于2,刚好对应heights[2]也就是c的高度- 每次拿当前字符的高度和已经记录的最大高度
height比对,如果当前字符更高,就更新height为当前字符的高度
- 遍历结束:此时
height已经是整个字符串里所有字符的最大高度,直接用字符串长度乘最大高度就能得到要求的面积
写法优化参考(C++11及以上)
可以用范围for循环简化手写逻辑,可读性更高:
int max_h = 0; for (char c : str) { max_h = max(max_h, heights[c-'a']); }
内容的提问来源于stack exchange,提问作者Nj coder
相关产品推荐
相关产品推荐

