题目来源:密钥格式化
一个简单的字符串问题,就是细节比较多。先来看一下我的代码:
class Solution {
public:
string licenseKeyFormatting(string s, int k) {
string temp;
int len = s.length();
for(int i = 0;i < len;i++)
{
if(s[i] != '-')
{
if(s[i] >= 'a' && s[i] <= 'z')temp.append(1,s[i] - 32);
else temp.append(1,s[i]);
}
}
len = temp.length();
int m = 0;
for(int i = len - 1;i >= 0;i--)
{
if(m != k - 1)m++;
else
{
if(i == 0)break;
temp.insert(i,"-");
m = 0;
}
}
return temp;
}
};
首先把所有除了'-'的字符全部复制到temp中,然后倒着插入'-',注意循环就可以了,但是这种方法每次提交用时都是500多ms,群里面有人提交的只用了4ms,所以我去看了一下题解中的做法。
class Solution {
public:
string licenseKeyFormatting(string s, int k) {
string temp;
int cnt = 0;
for(int i = s.size() - 1;i >= 0;i--)
{
if(s[i] != '-')
{
temp.push_back(toupper(s[i]));
cnt++;
if(cnt == k)
{
temp.push_back('-');
cnt = 0;
}
}
}
if(temp.size() > 0 && temp[temp.size() - 1] == '-')temp.pop_back();
reverse(temp.begin(),temp.end());
return temp;
}
};
方法很类似,首先是倒着复制,如果够了个数就插入一个'-',等结束后判断一下最后一个是不是'-',如果是的话就去掉,最后反转一下即可