2024年4月12日发(作者:)
题目:密钥格式化
给定一个许可密钥字符串
s
,仅由字母、数字字符和破折号组成。字符串由
n
个破
折号分成
n + 1
组。你也会得到一个整数
k
。
我们想要重新格式化字符串
s
,使每一组包含
k
个字符,除了第一组,它可以比
k
短,但仍然必须包含至少一个字符。此外,两组之间必须插入破折号,并且应该将
所有小写字母转换为大写字母。
返回
重新格式化的许可密钥
。
示例 1:
输入:S = "5F3Z-2e-9-w", k = 4
输出:"5F3Z-2E9W"
解释:字符串 S 被分成了两个部分,每部分 4 个字符;
注意,两个额外的破折号需要删掉。
示例 2:
输入:S = "2-5g-3-J", k = 2
输出:"2-5G-3J"
解释:字符串 S 被分成了 3 个部分,按照前面的规则描述,第一部分的字符可以少于
给定的数量,其余部分皆为 2 个字符。
提示:
•
•
•
1 <= <= 105
s
只包含字母、数字和破折号
'-'
.
1 <= k <= 104
语言:C++
class Solution {
public:
string licenseKeyFormatting(string s, int k) {
string ans;
int cnt = 0;
for (int i = () - 1; i >= 0; i--) {
if (s[i] != '-') {
_back(toupper(s[i]));
cnt++;
if (cnt % k == 0) {
_back('-');
}
}
}
if (() > 0 && () == '-') {
_back();
}
reverse((), ());
return ans;
}
};
语言:C++
class Solution {
public:
string licenseKeyFormatting(string s, int k) {
int counter=0;
for(int i=0;i<();++i)
counter+=(s[i]!='-');
if(counter==0) return "";
string newS(counter+counter/k-1+(counter%k!=0),'-');
counter=0;
int p = ();
for(int i=()-1;i>=0;--i)
if(s[i]!='-'){
newS[--p] = s[i]<'a'?s[i]:s[i]-'a'+'A';
counter=(counter+1)%k;
if(!counter) --p;
}
return newS;
}
};
语言:C++
class Solution {
public:
string licenseKeyFormatting(string s, int k) {
// 1.
删除所有的
-
string newStr = "";
for (auto ch : s)
{
if (ch != '-')
{
if (ch >= 'a' && ch <= 'z') _back(ch + 'A' - 'a');
else _back(ch);
}
}
int len = ();
// 2.
从末尾开始遍历
,
每走
k
格加一个
-
for (int i = len - 1; i >= 0; i--)
{
int gap = len - 1 - i;
if (gap > 0 && (gap % k == 0))
发布评论