LeetCode算法题-License Key Formatting(Java实现)
这是悦乐书的第241次升级,第254篇原创
01 看题和准备
今天详情的是LeetCode算法题中Easy级别的第108题(顺位题号是482)。您将取得一个表示为字符串S的许可证密钥,该字符串仅包含字母数字字符和短划线。该字符串被N个破折号分成N + 1个组。
给定数字K,我们希望重新格式化字符串,使得每个组包含正好的K个字符,但第一个组可能比K短,但依然必需包含至少一个字符。此外,必需在两个组之间插入短划线,并且所有小写字母都应转换为大写。给定非空字符串S和数字K,根据上述规则格式化字符串。例如:
输入:S =“5F3Z-2e-9-w”,K = 4
输出:“5F3Z-2E9W”
说明:字符串S分为两部分,每部分有4个字符。请注意,不需要两个额外的破折号,可以删除。
输入:S =“2-5g-3-J”,K = 2
输出:“2-5G-3J”
说明:字符串S被分成三个部分,每个部分除了第一部分之外有2个字符,由于它可以更短,如上所述。
注意:
字符串S的长度不超过12,000,K是正整数。
字符串S仅由字母数字字符(a-z和/或者A-Z和/或者0-9)和短划线( – )组成。
字符串S非空。
本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。
02 第一种解法
先将S中的”-“给替换掉,而后从后往前进行截取K个子串,并将其用“-”连接,假如最后一次截取的长度不够K,就直接从0开始截取,最后将新的字符串转为大写字母并返回。
public String licenseKeyFormatting(String S, int K) { StringBuilder sb = new StringBuilder(); String ss = S.replace("-", ""); for (int i=ss.length(); i>0; i-= K) { if (i-K > 0) { sb.insert(0, "-"+ss.substring(i-K, i)); } else { sb.insert(0, ss.substring(0, i)); } } return sb.toString().toUpperCase();}
03 第二种解法
将S变为字符数组,而后从后往前遍历,使用一个变量记数,来判断能否使用“-”连接两端,使用完“-”后,count要重归于1,以便下次继续使用。
public String licenseKeyFormatting2(String S, int K) { StringBuilder sb = new StringBuilder(); char[] arr = S.toCharArray(); int count = 0, len = S.length()-1; for (int i=len; i>=0; i--) { if (arr[i] != '-') { if (count < K) { sb.append(arr[i]+""); count++; } else { sb.append("-"); sb.append(arr[i]+""); count = 1; } } } return sb.reverse().toString().toUpperCase();}
04 第三种解法
和第二种思路一样,在判断什么时候使用”-“时,用了一点取巧,
sb.length() % (K + 1)
使用新字符串的长度对K+1取余,假如等于K,就说明新字符串到了该拼接”-“的位置了。
public String licenseKeyFormatting3(String S, int K) { StringBuilder sb = new StringBuilder(); for (int i = S.length() - 1; i >= 0; i--) { if (S.charAt(i) != '-'){ sb.append(sb.length() % (K + 1) == K ? '-' : "").append(S.charAt(i)); } } return sb.reverse().toString().toUpperCase();}
05 小结
算法专题目前已日更超过三个月,算法题文章108+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是一律内容,假如大家有什么好的解法思路、建议或者者其余问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » LeetCode算法题-License Key Formatting(Java实现)