题目地址:
https://leetcode.com/problems/license-key-formatting/
给定一个字符串
s
s
s,只含数字、英文字母和'-'
,再给定一个正整数
k
k
k,要求将
s
s
s的非'-'
字符
k
k
k个
k
k
k个分组,中间以'-'
隔开。第一组可以长度不到
k
k
k,但不能是空的。
可以逆序遍历
s
s
s,然后
k
k
k个一组来append非'-'
的字符。最后再翻转然后返回。代码如下:
public class Solution {
public String licenseKeyFormatting(String s, int k) {
StringBuilder sb = new StringBuilder();
for (int i = s.length() - 1, j = k; i >= 0; i--) {
char ch = s.charAt(i);
if (ch != '-') {
// 每append了k个字符,就append一个'-'
if (j == 0) {
j = k;
sb.append('-');
}
j--;
sb.append(Character.toUpperCase(ch));
}
}
return sb.reverse().toString();
}
}
时空复杂度 O ( l s ) O(l_s) O(ls)。