华为OD刷题C卷 - 每日刷题 16(连续字母长度,拼接URL)

73 篇文章 0 订阅
37 篇文章 1 订阅

两段代码分别解决了两个不同的字符串处理问题,下面是对它们的概述:

1、(连续字母长度):

这段代码是解决“连续字母长度”的问题。它提供了一个Java类Main,其中包含main方法和getResult方法,用于找出给定字符串中,按相同字母的最长连续子串长度排序后的第k长的子串的长度。

main方法首先读取一个只包含大写字母的字符串和整数k,然后调用getResult方法并打印结果。

getResult方法首先对字符串进行处理,将字符串末尾添加一个特殊字符(在这里是'0'),以便于处理最后一个字符的状态。然后,遍历字符串并使用一个HashMap来记录每个字符的最长连续子串长度。在遍历过程中,如果当前字符与前一个字符相同,则累加长度;如果不同,则更新HashMap中的记录,并重置当前字符和长度。

遍历结束后,将HashMap中的值(即每个字符的最长连续子串长度)提取出来,降序排序,并转换为数组。最后,检查k是否在数组的有效索引范围内,如果在,则返回第k-1个元素作为结果;如果不在,则返回-1表示无效输入。

2、(拼接URL):

这段代码是解决“拼接URL”的问题。它提供了一个Java类Main,其中包含main方法和joinUrl方法,用于将给定的URL前缀和后缀按照URL拼接规则连接成一个完整的URL。

main方法首先读取由逗号分隔的URL前缀和后缀,然后调用joinUrl方法并打印拼接后的URL。

joinUrl方法首先对前缀和后缀进行处理,去除前缀末尾和后缀开头的多余斜杠(/),然后按照URL的拼接规则,使用一个斜杠将前缀和后缀连接起来。

package OD251;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.StringJoiner;

/**
 * @description 连续字母长度
 * @level 6
 * @score 100
 * @url https://hydro.ac/d/HWOD2023/p/OD251
 */

/**
 * 题目描述
 * 给定一个字符串,只包含大写字母,求在包含同一字母的子串中,长度第 k 长的子串的长度,相同字母只取最长的那个子串。
 * <p>
 * 输入描述
 * 第一行有一个子串(1<长度<=100),只包含大写字母。
 * <p>
 * 第二行为 k的值
 * <p>
 * 输出描述
 * 输出连续出现次数第k多的字母的次数。
 */
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //输入字符串
        String str = sc.nextLine();
        //读取第k长的字符
        int k = Integer.parseInt(sc.nextLine());
        System.out.println(getResult(str, k));

    }

    public static int getResult(String s, int k) {
        //异常处理
        if (k <= 0) return -1;

        //给s末尾拼接一个0,方便后续比较前后字符是否相同,存入最后一个字符的状态
        s += "0";

        //找出连续字母的最大长度
        char[] chs = s.toCharArray();

        //存放不同字符的最大长度
        HashMap<Character, Integer> map = new HashMap<>();

        //初始状态 上一字符及该字符对应的最大长度
        char pre = chs[0];
        int len = 1;

        for (int i = 1; i < chs.length; i++) {
            //当前字符
            char cur = chs[i];
            if (cur == pre) {
                len++;
            } else {
                //如果当前字符跟上一个不相等,则判断map中是否不存在、或已存在但长度不是最长
                if (!map.containsKey(pre) || map.containsKey(pre) && len > map.get(pre)) {
                    map.put(pre, len);
                }
                //刷新状态
                pre = cur;
                len = 1;
            }
        }

        //只需要用到字符出现的次数排序 降序
        Integer[] arr = map.values().stream().sorted((a, b) -> b - a).toArray(Integer[]::new);

        //无效输出
        if (k > arr.length) return -1;
        else return arr[k - 1];
    }
}
package OD252;

import java.util.Scanner;

/**
 * @description 拼接URL
 * @level 6
 */

/**
 * 题目描述
 * 给定一个url前缀和url后缀,通过,分割 需要将其连接为一个完整的url
 * <p>
 * 如果前缀结尾和后缀开头都没有/,需要自动补上/连接符
 * 如果前缀结尾和后缀开头都为/,需要自动去重
 * 约束:不用考虑前后缀URL不合法情况
 * <p>
 * 输入描述
 * url前缀(一个长度小于100的字符串),url后缀(一个长度小于100的字符串)
 * <p>
 * 输出描述
 * 拼接后的url
 */
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //读取字符串、
        String[] url = sc.nextLine().split(",");
        //可能会出现 ","->[]   "1,"->["1"]  ",1"->["","1"]
        String prefix = url.length > 0 ? url[0] : "";
        String suffix = url.length > 1 ? url[1] : "";
        System.out.println(joinUrl(prefix, suffix));
    }

    //拼接url
    public static String joinUrl(String prefix, String suffix) {
        //把前缀后面的一个或多个/去掉 $表示末尾 +表示一个或多个
        prefix = prefix.replaceAll("/+$", "");
        //把后缀前面的一个或多个/去掉 ^表示开头
        suffix = suffix.replaceAll("^/+", "");
        //用字符/连接
        return prefix + "/" + suffix;
    }
}
  • 14
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
拼接URL是指将不同的字符串或资源路径组合成一个完整的URL链接。在华为OD机试中,可能会遇到需要进行URL拼接的问题。 URL拼接通常需要注意以下几个方面: 首先,要确保URL的格式正确。一个标准的URL由协议、主机名、路径和查询参数组成。其中协议通常是http或https,主机名是指要访问的服务器域名或IP地址,路径是指资源在服务器上的位置,查询参数是附加在URL末尾以便传递给服务器的数据。 其次,要注意字符串拼接的顺序和格式。根据需求,可以使用字符串拼接函数或操作符将各个部分连接起来。在拼接过程中,要注意添加适当的分隔符,如斜杠“/”或问号“?”等,以确保拼接后的URL格式正确。 另外,还需要注意转义特殊字符。如果URL中包含特殊字符,如空格、中文或特殊符号等,需要进行URL编码。这可以通过使用URL编码函数或库来实现。编码可以确保URL在传输过程中不会出现问题,并且服务器能够正确解析URL中的特殊字符。 最后,要进行URL合法性检查。在拼接URL之前,可以对输入的字符串进行一些合法性验证。这可以包括检查字符串是否为空、是否包含非法字符或其他错误。 综上所述,拼接URL是在华为OD机试中可能出现的问题之一。在处理此类问题时,需要注意URL格式的正确性、字符串的拼接顺序和格式、特殊字符的转义以及URL的合法性检查等方面。通过合理使用字符串拼接函数和URL编码函数,可以有效地完成URL拼接任务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值