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))