目录

裴先生
裴先生
发布于 2022-04-13 / 0 阅读
0
0

算法题:拼接URL

原创

在处理URL拼接时,常常会遇到路径分隔符 / 的重复或缺失问题。本文提供一种简洁高效的解决方案,确保无论输入如何,都能生成格式正确的完整URL。

题目描述

给定一个URL前缀和URL后缀(通过逗号 , 分割),需要将其连接为一个完整的URL:

  • 如果前缀结尾和后缀开头都没有 /,需要自动补上 / 连接符
  • 如果前缀结尾和后缀开头都为 /,需要自动去重

约束:不用考虑前后缀URL不合法的情况

输入输出要求

输入:url前缀(长度小于100的字符串),url后缀(长度小于100的字符串)
输出:拼接后的url

示例

输入输出
/acm,/bb/acm/bb
/abc/,/bcd/abc/bcd
/acd,bef/acd/bef
,/

优化后的Java解法

import java.util.Scanner;

public class ConcatURL {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String line = scanner.nextLine();
        String[] parts = line.split(",", 2); // 限制分割为两部分
        
        String prefix = parts.length > 0 ? parts[0] : "";
        String suffix = parts.length > 1 ? parts[1] : "";
        
        // 处理特殊情况:两个都为空
        if (prefix.isEmpty() && suffix.isEmpty()) {
            System.out.println("/");
            return;
        }
        
        StringBuilder result = new StringBuilder();
        
        // 添加前缀(确保不以/结尾)
        if (!prefix.isEmpty()) {
            if (prefix.endsWith("/")) {
                result.append(prefix, 0, prefix.length() - 1);
            } else {
                result.append(prefix);
            }
        }
        
        // 添加分隔符
        result.append("/");
        
        // 添加后缀(确保不以/开头)
        if (!suffix.isEmpty()) {
            if (suffix.startsWith("/")) {
                result.append(suffix.substring(1));
            } else {
                result.append(suffix);
            }
        }
        
        System.out.println(result.toString());
    }
}

算法优势

  1. 正确性:原题解法存在逻辑错误,简单地移除所有 / 再重新添加会导致路径信息丢失(如 //api/v1 会被错误处理)
  2. 健壮性:正确处理各种边界情况,包括空输入、单个 /
  3. 效率:时间复杂度 O(n),空间复杂度 O(n),符合题目约束条件

原创

版权声明:本博客原创文章,由 裴先生 2022年04月13日 发表。
转载说明:除特殊说明外本站文章皆由 CC BY-NC-SA 4.0 协议发布,转载须注明出处。


评论