【华为OD题库-011】最长公共后缀-Java

news/2024/7/20 18:19:17 标签: 华为od, java

题目

编写个函故来查找字符审数组中的最长公共后缀,如果不存在公共后缓,返回固定字符串 @Zero
补充说明:
1、字符串长度范围[2,1000];
2、字符串中字符长度范围为[1,126]
输入描述
[“abc” “bbc” c]
输出描述
“C”
示例1:
输入:
[“abc”,“bbc”,“c”]
输出:
“C”
说明:
返回公共后缀: C
示例2:
输入:
[“aa”,“b”,“c”]
输出:
“@Zero”
说明:
不存在公共后缀,返回固定结果@Zero

思路

先将输入的字符数组arr中的每个字符串倒序处理(反转后更容易理解,不转也是可以的),原来需要求最长后缀,转化为求最长前缀的反转字符
以第一个字符串为基准,第一层遍历第一个元素的所有字符,遍历范围i:[0,arr[0].length]
第二层遍历字符串数组中的第二道最后一个字符串,遍历范围j:[1,arr.length]。看其第i个元素是否和arr[0]的第i个元素相等。
如果相等,那么当前i位置的字符算是公共字符,继续遍历下一个字符。
如果不等,或者超过数组范围,那么直接截取arr[0]的第0到i个字符str,最后范围str的反转字符即可。
遍历结束后,还没有范围,那么最长公共前缀就是arr[0]
再考虑处理没有相同字符的情况:输入字符串数组长度为0,或者在【截取arr[0]的第0到i个字符】时,i等于0。直接返回@zero

题解

java">package hwod;

import java.util.Arrays;
import java.util.Scanner;

public class LongestCommonSuffix {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String inputs = sc.nextLine();
        String s = inputs.replaceAll("\"", " ").replaceAll(",", " ");
        //去掉首尾中括号
        String[] arrs = s.substring(1, s.length() - 1).trim().split("\\s+");
        //获取倒序
        String[] reverse_arrs = Arrays.stream(arrs).map(x -> new StringBuilder(x).reverse().toString()).toArray(String[]::new);
        System.out.println(longestCommonSuffix(reverse_arrs));
    }

    private static String longestCommonSuffix(String[] reverse_arrs) {

        if (reverse_arrs == null || reverse_arrs.length == 0) {
            return "@Zero";
        }
        int m = reverse_arrs.length, n = reverse_arrs[0].length();
        for (int i = 0; i < n; i++) {
            for (int j = 1; j < m; j++) {
                if (i == reverse_arrs[j].length() || reverse_arrs[0].charAt(i) != reverse_arrs[j].charAt(i)) {
                    if (i == 0) return "@Zero";
                    return new StringBuilder(reverse_arrs[0].substring(0,i)).reverse().toString();
                }
            }
        }
        return new StringBuilder(reverse_arrs[0]).reverse().toString();
    }
}

推荐

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


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

相关文章

一款好用的jpeg分析软件 JPEGsnoop

最近解码器解码jpeg的时候出了问题&#xff0c;为了追踪问题&#xff0c;找到了这款免费好用的jpeg分析软件- JPEGsnoop。 顶礼膜拜。 贴上链接地址&#xff1a; https://github.com/ImpulseAdventure/JPEGsnoop/releases 上面已经有编译好的win10 exe了 下载后解压&#x…

【Java】如何将二进制转换成MultipartFile

业务场景&#xff1a;前端发送请求到后端进行文件上传&#xff0c;后端接收文件并调用第三方接口进行文件处理&#xff0c;响应格式为二进制&#xff0c;然后我们需要将二进制进行转换为MultipartFile进行文件上传。 如果你想要将File转换成MultipartFile&#xff0c;可以参考&…

【避雷选刊】Springer旗下2/3区,2个月录用!发文量激增,还能投吗?

计算机类 • 好刊解读 前段时间小编分析过目前科睿唯安数据库仍有8本期刊处于On Hold状态&#xff0c;其中包括4本SCIE、4本ESCI期刊&#xff08;&#x1f449;详情可见&#xff1a;避雷&#xff01;又有2本期刊被标记“On Hold”&#xff01;含中科院2区&#xff08;TOP&…

达梦数据库集群修改初始化级别的系统参数步骤

查看当前参数&#xff1a;grep -i MAX_SESSIONS /data/dmdata/HIDC/dm.ini 查看当前是否有活动应用 select datediff(ss,last_recv_time,sysdate) ss,dbms_lob.substr(sf_get_session_sql(sess_id)) sql_text,sess_id,substr(clnt_ip,8,13) IP,clnt_ver from v$sessions where…

Django 基于ORM的CURD、外键关联,请求的生命周期

文章目录 基于ORM进行的CURDORM外键关联Django请求的生命周期流程图 基于ORM进行的CURD 本质上就是通过面向对象的方式&#xff0c;对数据库的数据进行增、删、改、查。 这里将会将我们之前所有内容结合到一起&#xff0c;首先确保基于上序操作已经建立好了UserInfo表&#xff…

2011年09月29日 Go生态洞察:image/draw包的深度解析

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

欧洲大学专场黑客松,获奖者们在Sui上构建链上物品验证并改进荷兰拍卖

在由区块链学生协会&#xff08;Blockchain Student Association&#xff09;与Sui合作的黑客松上&#xff0c;获奖者们构建了旨在吸引新用户并弥合区块链技术与实物资产之间差距的项目。这些新项目展示了Sui的发展前景和灵活性&#xff0c;以及它如何解决现实世界的问题。 来…

py文件如何打包成exe?如何压缩文件大小?

打包 要将 Python 文件打包成可执行文件&#xff0c;您可以使用 PyInstaller 这个工具。以下是具体步骤&#xff1a; 首先&#xff0c;确保您已经安装了 PyInstaller。如果没有安装&#xff0c;可以使用以下命令安装&#xff1a; pip install pyinstaller进入您的 Python 程序…