【华为OD题库-016】字符串摘要-Java

news/2024/7/20 17:35:54 标签: 华为od, java, 字符串摘要

题目

给定一个字符串的摘要算法,请输出给定字符串的摘要值
1、去除字符串中非字母的符号
2、如果出现连续字符(不区分大小写),则输出:该字符(小)+连续出现的次数
3、如果是非连续的宁符(不区分大小写),则输出:该字符(小写)该字母之后字符串中出现的该字符的次数
4、对按照以上方式表示后的字符串进行排序:字母和紧随的数字作为一组进行排序,数字大的在前,数字相同的则按字母进行排序,字母小的在前。
输入描述:
行字符串,长度为[1,200]
输出描述:
摘要字符串
示例1
输入:
aabbcc
输出:
a2b2c2
示例2
输入:
bAaAcBb
输出:
a3b2b2c0
说明:
第一个b非连续字母,该字母之后字符串中还出现了2次(最后的两个Bb),所以输出b2。a连续出现3次,输出a3,c非连续,该字母之后字符串再没有出现过c,输出c0,Bb连续2次,输出b2
对b2、a3、c0、b2进行排序,最终输出a3b2b2c0

思路

字符串处理的简单题,大致过程如下:
遍历字符串,利用Character.isAlphabetic©,过滤掉非字母符号
将字符串转为小写
遍历处理后的字符串,固定首位(i=0),判断i位置的字符是否为连续字符:
如果是连续字符,计算连续字符的个数,并将结果拼接为字符串(字符+连续次数)存入集合res中
如果是非连续字符,计算字符串后面出现该字符的次数,将结果拼接为字符串(字符+后面的子字符串出现该字符的次数),存入集合res中
最后对res排序即可(按出现次数从小到大)

题解

java">package hwod;

import java.util.*;

public class StringAbstract {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        System.out.println(stringAbstract(input));
    }

    private static String stringAbstract(String input) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < input.length(); i++) {
            if (Character.isAlphabetic(input.charAt(i))) {
                sb.append(input.charAt(i));
            }
        }
        String pureString = sb.toString().toLowerCase();

        char[] chars = pureString.toCharArray();
        List<String> res = new ArrayList<>();
        for (int i = 0; i < chars.length; i++) {
            if (i + 1 < chars.length && chars[i + 1] == chars[i]) {
                //连续字符
                int k = i + 1;
                while (k < chars.length && chars[k] == chars[i]) k++;
                res.add(String.valueOf(chars[i]) + (k - i));
                i = k - 1;
            } else {
                //非连续字符
                int cnt = getNum(pureString.substring(i + 1), chars[i]);
                res.add(String.valueOf(chars[i]) + cnt);
            }
        }
        res.sort((str1, str2) -> {
            int n1 = str1.charAt(1) - '0';
            int n2 = str2.charAt(1) - '0';
            if (n1 != n2) return n2 - n1;
            return str1.charAt(0) - str2.charAt(0);
        });
        sb = new StringBuilder();
        for (int i = 0; i < res.size(); i++) {
            sb.append(res.get(i));
        }
        return sb.toString();
    }

    private static int getNum(String str, char c) {
        if (str == null || str.length() == 0) return 0;
        int res = 0;
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == c) res++;
        }
        return res;
    }
}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。


http://www.niftyadmin.cn/n/5185198.html

相关文章

上传到服务的jar包怎么使用docker运行部署

将已经打好包的springboot的jar包手动上传到服务器&#xff0c;然后运维怎么构建容器并发布呢 要使用 Docker 部署一个已经上传的 Java JAR 包&#xff0c;你需要创建一个 Dockerfile&#xff0c;并在里面编写必要的指令来设置运行环境和启动你的应用。以下是一个基本步骤的概述…

【Linux】vscode远程连接ubuntu失败

VSCode远程连接ubuntu服务器 这部分网上有很多&#xff0c;都烂大街了&#xff0c;自己搜吧。给个参考连接&#xff1a;VSCode远程连接ubuntu服务器 注意&#xff0c;这里我提前设置了免密登录。至于怎么设置远程免密登录&#xff0c;可以看其它帖子&#xff0c;比如这个。 …

如何在interface中处理DUT中的inout信号

如果在dut中声明为inout类型的信号&#xff0c;处理的方式如下&#xff1a; 例如dut中声明的信号为inout [7:0] data&#xff1b; 在interface声明3个信号&#xff0c;一个是wire型的信号&#xff1a; wire logic [7:0] data;一个是将外部信号赋值给data的 i…

实验室LIMS系统 asp.net源码 lims系统源码

LIMS系统是以实验室为中心&#xff0c;将人员、仪器、试剂、方法、环境、文件等影响分析数据的因素有机结合&#xff0c;针对实验室的要求&#xff0c;遵循ISO 17025准则&#xff0c;采用先进的计算机网络技术、数据存储技术、快速和强大的数据处理技术来对实验室进行全面管理的…

JS-项目实战-删除库存记录

1、fruit.js function $(name) {if (name) {//假设name是 #fruit_tblif (name.startsWith("#")) {name name.substring(1); //fruit_tblreturn document.getElementById(name);}} }//当页面加载完成后执行后面的匿名函数 window.onload function () {//get:获取…

Qt 5.15.11 源码windows编译

1.下载qt5.15.11源码 https://download.qt.io/official_releases/qt/5.15/5.15.11/single/qt-everywhere-opensource-src-5.15.11.zip 2.解码源码到桌面 3.安装cmake ,python ,perl, Visual Studio 2019 Strawberry Perl for Windows Win flex-bison download | SourceForge…

幸福金龄会《金龄盛典》佛山赛区启动海选

近日&#xff0c;由中国老龄事业发展基金会老年维权管理委员会指导&#xff0c;金龄管理委员会&#xff08;以下简称“金龄会”&#xff09;主办的《金龄盛典》中老年春晚佛山赛区启动演出在佛山桂城万达隆重举行。 此次大赛佛山赛区由金龄会及佛山优秀传统文化促进会联合承办&…

插件漏洞导致 60 万个 WordPress 网站遭受攻击

WordPress 插件 WP Fastest Cache 容易受到 SQL 注入漏洞的攻击&#xff0c;该漏洞可能允许未经身份验证的攻击者读取站点数据库的内容。 WP Fastest Cache 是一个缓存插件&#xff0c;用于加速页面加载、改善访问者体验并提高网站在 Google 搜索上的排名。 根据 WordPress.o…