首页 > 其他分享 >密钥格式化

密钥格式化

时间:2023-07-06 20:33:29浏览次数:26  
标签:count 格式化 String int StringBuilder 密钥 str sb

给定一个许可密钥字符串 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 <= s.length <= 105
s 只包含字母、数字和破折号 '-'.
1 <= k <= 104

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/license-key-formatting
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

屎山代码

class Solution {
    public String licenseKeyFormatting(String s, int k) {
        //先把字符串按照"/"进行分割
        String[] newStr = s.split("-");
        System.out.println(Arrays.toString(newStr));
        StringBuilder str =  new StringBuilder(String.join("", newStr).trim().toUpperCase());
        int count = 0;
        //从末尾进行按k组队插入
        for(int i=str.length();i>=0;i--){
            if(count==k){
                str.insert(i, "-");
                count = 0;
            }
            count++;
        }
        //过滤开头"-"
        while(str.length()!=0&&str.charAt(0)=='-'){
            str.delete(0, 1);
        }
        return str.toString();
    }
}

优化转换之间损耗,直接使用StringBuilder,减少内存消耗

class Solution {
    public String licenseKeyFormatting(String s, int k) {
        //利用StringBuilder先遍历得到字母
        //再根据k进行插入"-"
        StringBuilder sb = new StringBuilder();
        for(int i=0;i<s.length();i++){
            if(s.charAt(i)!='-'){
                sb.append(s.charAt(i));
            }
        }
        System.out.println(sb.toString());
        for(int i=sb.length()-k;i>0;i-=k){
            sb.insert(i, '-');
        }
        return sb.toString().toUpperCase();
    }
}

一次遍历,直接进行字符串拼接和插入'-'

class Solution {
    public String licenseKeyFormatting(String s, int k) {
        StringBuilder sb = new StringBuilder();
        int count = 0;
        //从末尾遍历
        for(int i=s.length()-1;i>=0;i--){
            if(s.charAt(i)!='-'){
                sb.append(Character.toUpperCase(s.charAt(i)));
                count++;
                //满足规则的地方插入'-'
                if(count % k==0){
                    sb.append('-');
                }
            }
        }
        //可能有多余的'-'进行删除
        if(sb.length() > 0 &&sb.charAt(sb.length()-1)=='-'){
            sb.deleteCharAt(sb.length() - 1);
        }
        return sb.reverse().toString();
    }
}

标签:count,格式化,String,int,StringBuilder,密钥,str,sb
From: https://www.cnblogs.com/xiaochaofang/p/17533287.html

相关文章

  • 利用身份验证和授权机制,例如OAuth、JWT 和 API 密钥,APIaaS 如何帮助解决安全挑战?
    什么是APIaaS?APIaaS,即API即服务(APIasaService)是一种创新的基于云的方法,提供API(应用程序编程接口),使第三方服务提供商能够访问特定服务、数据或资源。它通过抽象内部API的复杂性,简化了开发、部署和管理API的过程。其主要目标是使开发人员和企业更容易地在其应用程序或软......
  • 如何将SSL证书从Kubernetes Secrets导出并复原为证书PEM和密钥文件
    首先,您需要使用kubectl工具从Kubernetes导出Secret到一个yaml文件,这通常使用如下命令:kubectlgetsecretmy-secret-oyaml>my-secret.yaml然后我们可以创建一个简单的bash脚本来处理yaml文件并导出证书:#!/bin/bash#解析yaml文件并得到证书内容certData=......
  • 如何正确格式化sqlite shell输出?
    sqlite>.modecolumnsqlite>select*fromfoo;234kshitizdba.sesqlite>.headersonsqlite>select*fromfoo;barbazbaf------------------------------234kshitizdba.seecho-e'.modecolum......
  • js格式化货币方法
    ......
  • notepad++如何快速格式化代码
     2023-03-25 4505 广东举报简介: notepad++如何快速格式化代码Notepad++可以使用插件来快速格式化代码,以下是一种使用插件进行代码格式化的方法:打开Notepad++编辑器,并打开需要格式化的代码文件。在菜单栏中选择“插件”->“PluginManager”->“ShowPluginManag......
  • 在Windows 11/10/8/7中将U盘快速格式化为FAT32的好方法
    链接:https://www.disktool.cn/content-center/how-to-format-pendrive-in-windows-7-666.html使用磁盘管理工具格式化U盘步骤1. 打开电脑,“Win+R”打开运行框。输入diskmgmt.msc再按Enter键打开磁盘管理工具。步骤2. 右键单击您想要格式化的U盘并选择“格式化”。步骤3. ......
  • Git生成ssh密钥及配置
    由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以必须要让github仓库认证你SSHkey,在此之前,必须要生成SSHkey。第1步:创建SSHKey。在windows下查看[c盘->用户->自己的用户名->.ssh下是否有id_rsa、id_rsa.pub文件,如果没有需要手动生成。在开始菜单中打开git下的gitb......
  • js 数字格式化,只能输入正负整数,小数
     1、只能输入正整数<inputname="columnValue"class="input96required"type="text"size="50"onkeyup="if(this.value.length==1){this.value=this.value.replace(/[^1-9]/g,'')}else{this.value=this.value.replac......
  • 日期时间格式化
    //日期格式化parseTime(time,pattern){if(arguments.length===0||!time){returnnull;}letdate;date=newDate(time);varh=date.getHours();if(h<10){h="0"+h;......
  • java时间工具类型,格式化时间,最近7天 月初 月末 季度 月度 时间格式化
    常用java时间格式化:packagecom.tz.util;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;/***时间工具类最近7天月初月末季度月度时间格式化等等……**@description时间工具类*@author:tz*@dtate:......