密钥格式化
题目描述:有一个密钥字符串 S ,只包含字母,数字以及 ‘-’(破折号)。其中, N 个 ‘-’ 将字符串分成了 N+1 组。
给你一个数字 K,请你重新格式化字符串,使每个分组恰好包含 K 个字符。特别地,第一个分组包含的字符个数必须小于等于 K,但至少要包含 1 个字符。两个分组之间需要用 ‘-’(破折号)隔开,并且将所有的小写字母转换为大写字母。
给定非空字符串 S 和数字 K,按照上面描述的规则进行格式化
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/license-key-formatting
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
先将所有的 ‘-’ 替换,大小写转换处理,将处理后的字符串转换为数组
题目第一个分组会有特殊情况,所以从后往前遍历拼接
代码
*js版本
/**
* @param {string} S
* @param {number} K
* @return {string}
*/
var licenseKeyFormatting = function(S, K) {
let help = S.replace(/-/g,'').toUpperCase().split('');
let temp = 0;
for(let i = help.length - 1; i > 0; i--) {
++temp;
if(temp === K) {
help.splice(i, 0, '-');
temp = 0;
}
}
return help.join('')
};
Java版本
class Solution {
public String licenseKeyFormatting(String S, int K) {
StringBuilder builder = new StringBuilder();
for(int i = 0; i< S.length(); i++) {
if(S.charAt(i) != '-') {
builder.append(S.charAt(i));
}
}
for(int i = builder.length()-K; i>0; i -= K) {
builder.insert(i, '-');
}
return builder.toString().toUpperCase();
}
}
执行结果
复盘:都是采用倒叙插入的方法,大量调用API, Java的写法参考了题解,自己写的太繁琐,执行时间js比java长很多,应该是splice方法频繁插入花费时间较长,如果是连续的push、pop操作时间可能更快。