专业的JAVA编程教程与资源

网站首页 > java教程 正文

打基础之LeetCode算法题第42日:关于字符串的换行问题

temp10 2024-10-14 17:22:06 java教程 8 ℃ 0 评论

一直很纠结算法的文章应该怎么写。最后觉得还是从最简单的level开始写吧,一开始就弄些重量级的,什么人工智能,机器学习的算法,还要有大量的数学以及优化的知识,小白们估计会很郁闷,当然我也不一定能做出来对吧。

我计划每题给出两种语言的解决方案,一种静态语言,一种动态语言。

打基础之LeetCode算法题第42日:关于字符串的换行问题

我选择C语言,Python和Java作为实现语言,由于篇幅有限,其他语言的实现有兴趣的朋友请自己尝试。

LeetCode 806. 写字符串需要的行数(Number of Lines To Write String)

应"狼神185786876"的建议。从这篇开始,除了C和Python的实现,增加了Java的实现。一切合理的要求都应该满足,感谢大家一直以来的关注和支持。

问题描述:

我们要把给定的字符串 S 从左到右写到每一行上,每一行的最大宽度为100个单位,如果我们在写某个字母的时候会使这行超过了100 个单位,那么我们应该把这个字母写到下一行。我们给定了一个数组 widths ,这个数组 widths[0] 代表 'a' 需要的单位, widths[1] 代表 'b' 需要的单位,..., widths[25] 代表 'z' 需要的单位。

现在回答两个问题:至少多少行能放下S,以及最后一行使用的宽度是多少个单位?将你的答案作为长度为2的整数列表返回。

注:

  1. 字符串 S 的长度在 [1, 1000] 的范围。
  2. S 只包含小写字母。
  3. widths 是长度为 26的数组。
  4. widths[i] 值的范围在 [2, 10]。

示例:

C语言实现:

我的思路,在开始遍历字符串每个字符之前定义两个变量分别用来存放行数和统计当前行宽。

如果当前行宽和当前字符的宽度和大于100的时候就要换行,因此这个可以作为条件来完成行数的加一,同时一旦行数发生变化,当前行宽的统计也就要从新开始,因此这个时候统计当前行宽的变量就要重置为0;

代码如下:

算法的复杂度是O(n),基于最直观的逻辑。

对于一个算法了说,时间复杂度能达到线性增长,已经是不错的了。但是对于这道题我感觉应该还有比较好的算法实现。如果有人想出来了,请在下面留言分享你的思路,以便和大家分享。谢谢!

python语言的实现:

python的实现方式和C语言的大体相同,唯一不同的地方是,我首先用一个列表生成器按顺序直接求出字符串中所有字符的宽度列表。

Java语言的实现:

Java的实现和C语言的实现大体一致,在此不再撰述。

代码如下:

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表