leetcode-482-License Key Formatting
题目描述:
You are given a license key represented as a string S which consists only alphanumeric character and dashes. The string is separated into N+1 groups by N dashes.
Given a number K, we would want to reformat the strings such that each group contains exactly K characters, except for the first group which could be shorter than K, but still must contain at least one character. Furthermore, there must be a dash inserted between two groups and all lowercase letters should be converted to uppercase.
Given a non-empty string S and a number K, format the string according to the rules described above.
Example 1:
Input: S = "5F3Z-2e-9-w", K = 4 Output: "5F3Z-2E9W" Explanation: The string S has been split into two parts, each part has 4 characters.
Note that the two extra dashes are not needed and can be removed.
Example 2:
Input: S = "2-5g-3-J", K = 2 Output: "2-5G-3J" Explanation: The string S has been split into three parts, each part has 2 characters except the first part as it could be shorter as mentioned above.
Note:
- The length of string S will not exceed 12,000, and K is a positive integer.
- String S consists only of alphanumerical characters (a-z and/or A-Z and/or 0-9) and dashes(-).
- String S is non-empty.
要完成的函数:
string licenseKeyFormatting(string S, int K)
说明:
1、给定一个字符串S和一个正数K,字符串中只含有字母、数字和破折号,比如5F3Z-2e-9-w。
要求将字符串的格式重新编排,使得被破折号隔开的每个部分含有K个字符,除了最开始的第一个部分可以是小于等于K个字符的,但必须至少有一个字符。
同时要求字符串中的小写字母转化为大写字母。
比如字符串是5F3Z-2e-9-w,K=4,那么重新编排完格式是5F3Z-2E9W。
如果字符串是9-5F3Z-2e-9-w,K=4,那么重新编排完格式就是9-5F3Z-2E9W。
2、题意清晰,这道题我们要从字符串的最后开始处理,这样比较方便。
代码如下:(附详解)
string licenseKeyFormatting(string S, int K)
{
string res;//最后要返回的字符串
int i=S.size()-1,count=0;
while(i>=0)
{
if(S[i]!='-')//如果这个字符是字母或者数字
{
count++;
if(count<=K)//如果还没有达到K个
{
res+=char(toupper(S[i]));//大小写转换,增加到res中
i--;
}
else//如果达到了K个
{
res+='-';//插入'-'
count=0;//重新开始计数
}
}
else//如果这个字符是'-'
i--;
}
reverse(res.begin(),res.end());//最后反转一下,就是我们要的字符串。
return res;
}
上述代码实测12ms,beats 98.58% of cpp submissions。
3、一些其他说明:
可能有的同学写的也是跟笔者一样的2中的代码,只不过在res+=char(toupper(S[i]))这里,改成了res=char(toupper(S[i]))+res。这样最后就不用reverse了。
但这样提交了之后会发现花费时间巨大,是2中代码花费时间的20倍左右。
原因是res=char(toupper(S[i]))+res处理的时候,可以看做是重新定义一个临时字符串,把S[I]的值放进去,然后再增加了res,最后把临时字符串赋给了res。
而res+=char(toupper(S[i]))是直接在res后面增加了S[i],类似于vector.push_back()。
两者相比较起来,还是2中的方法快速,最后做一下reverse其实花费时间也不多。
leetcode-482-License Key Formatting的更多相关文章
- [LeetCode] 482. License Key Formatting 注册码格式化
You are given a license key represented as a string S which consists only alphanumeric character and ...
- 【leetcode】482. License Key Formatting
problem 482. License Key Formatting solution1: 倒着处理,注意第一个字符为分隔符的情况要进行删除,注意字符的顺序是否正序. class Solution ...
- 482. License Key Formatting - LeetCode
Question 482. License Key Formatting Solution 思路:字符串转化为char数组,从后遍历,如果是大写字母就转化为小写字母,如果是-就忽略,如果遍历了k个字符 ...
- 【LeetCode】482. License Key Formatting 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 482 License Key Formatting 注册码格式化
详见:https://leetcode.com/problems/license-key-formatting/description/ C++: class Solution { public: s ...
- 482. License Key Formatting
static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ...
- LeetCode_482. License Key Formatting
482. License Key Formatting Easy You are given a license key represented as a string S which consist ...
- [LeetCode] License Key Formatting 注册码格式化
Now you are given a string S, which represents a software license key which we would like to format. ...
- [Swift]LeetCode482. 密钥格式化 | License Key Formatting
You are given a license key represented as a string S which consists only alphanumeric character and ...
- LeetCode算法题-License Key Formatting(Java实现)
这是悦乐书的第241次更新,第254篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第108题(顺位题号是482).您将获得一个表示为字符串S的许可证密钥,该字符串仅包含字 ...
随机推荐
- 265. Paint House II 房子涂色K种选择的版本
[抄题]: There are a row of n houses, each house can be painted with one of the k colors. The cost of p ...
- [Training Video - 5] [Groovy Script Test Step - Collections, Exceptions] HashSet and Hashtable
Hashset: HashSet set = new HashSet() set.add("India") set.add("USA") set.add(&qu ...
- Java JarFile 解析
Java JarFile 解析 package com.github.binarylei; import java.io.*; import java.net.URL; import java.net ...
- 为什么都说UX / UI设计师是最佳工作?
以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 你将成为永远热爱自己工作的人,做着自己喜欢的工作还能得到相应的成果和报酬,就好似在度带薪年假一般,何 ...
- 邹欣,现代软件工程讲义:单元测试&回归测试
http://www.cnblogs.com/xinz/archive/2011/11/20/2255830.html 邹欣, 现代软件工程讲义 2 开发技术 - 单元测试 & 回归测试
- o7 文件和函数
一:文件 1 控制文件内指针的移动 文件内指针移动,只有在t模式下的read(n),n代表的字符的个数 除此之外文件内指针的移动都是以字节为单位的 with open('a.txt',mode ='r ...
- Mac之如何查看已用端口
一.苹果自带的网络分析工具查看方法: OS X 10.9 下面 网络实用工具 从实用工具目录里消失了,可能苹果认为这个程序用的人太少就取消了吧.但是对于做互联网的人还是有点用的. 启动方法 ...
- 网络中的A、B、C类地址
1.A类ip地址(1.0.0.0到126.255.255.255) A类地址只有第一个8位表示网络地址,最高位一定为0,所以A类地址的网络号范围可以为:64+32+16+8+4+2+1=127,也就是 ...
- thinkphp+redis+队列
1,安装redis,根据自己的php版本安装对应的redis扩展(此步骤简单的描述一下) 1.1,安装 php_igbinary.dll,php_redis.dll扩展此处需要注意你的php版本如图: ...
- IO 之 InputStream 和 Reader
package java.io; // Representing an input stream of bytes. public abstract class InputStream impleme ...