【2025华为OD机考真题】- 拼接URL(B卷-100分)(Golang版)

本文收录于「最新最全华为OD机试真题(Golang版)」专栏,手把手带你零基础教学华为OD机试。本题集提供最优题解思路,解题步骤,代码解析,复杂度分析及最优题解源码等,支持多语言题解,助你轻松拿捏OD机考,一举上岸!安利大家关注&&收藏&&订阅题库正在疯狂收录中,up!up!up!!
提醒:拒绝一切代考/替考,违法必究!专栏所写题库均搜集于互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验所撰,欢迎订阅。
  
订阅福利:一次订阅,可永久免费阅读,提供在线答疑解惑,后续题库更新皆可阅读使用!

所有题目均有六种语言实现,汇总如下

  • 【华为OD机试】最新最全真题汇总A+B+C+D+E卷【全栈版】
  • 【华为OD机试】最新最全真题汇总A+B+C+D+E卷【Java版】
  • 【华为OD机试】最新最全真题汇总A+B+C+D+E卷【Python版】
  • 【华为OD机试】最新最全真题汇总A+B+C+D+E卷【C版】
  • 【华为OD机试】最新最全真题汇总A+B+C+D+E卷【C++版】
  • 【华为OD机试】最新最全真题汇总A+B+C+D+E卷【Golang版】
  • 【华为OD机试】最新最全真题汇总A+B+C+D+E卷【JavaScript版】

如上题库均已同步更新至最新华为OD机试真题,赶紧操练起来吧~~

1. 题目描述

具体题目描述如下:

给定一个 url 前缀和 url 后缀,通过 ,分割 需要将其连接为一个完整的 url 如果前缀结尾和后缀开头都没有/
需要自动补上 / 连接符
如果前缀结尾和后缀开头都为/
需要自动去重
约束:
不用考虑前后缀 URL 不合法情况

2. 输入描述

url 前缀(一个长度小于 100 的字符串)
url 后缀(一个长度小于 100 的字符串)

️3. 输出描述

拼接后的 url

4. 示例演示

✨4.1 示例1

输入:

/acm,/bb

输出:

/acm/bb

示例说明:

✨4.2 示例2

输入:

/abc/,/bcd

输出:

/abc/bcd

示例说明:

✨4.3 示例3

输入:

/acd,bef

输出:

/acd/bef

示例说明:

✨4.4 示例4

输入:

,

输出:

/

示例说明:

温馨提醒: 大家在参加华为OD机试时,切记不要仅仅死记硬背题解代码。真正的通过率取决于你对代码的理解能力。建议你在理解基本原理和逻辑的基础上,模仿并自己编写代码,这样才能更有效地应对机试。

5. 解题分析

5.1 问题理解

该题的核心要求是根据给定的 url 前缀和 url 后缀,拼接成一个完整的 URL。题目要求考虑到两种情况:

  1. 如果前缀的结尾和后缀的开头没有斜杠 /,则自动添加一个 / 连接符;
  2. 如果前缀结尾和后缀开头都为斜杠 /,则去重多余的 /,确保 URL 中只保留一个斜杠作为分隔符。
    此外,还需要处理一些特殊情况,比如当输入为空时,输出一个根目录 /

5.2 解题思路

  1. 输入处理

    • 首先读取用户输入的字符串,并用逗号 , 进行分割,分割后的结果应包含两个部分,即 url 的前缀和后缀。
    • 如果输入为空,则直接返回根目录 /
  2. 拼接逻辑

    • 如果前缀和后缀都存在,则在它们中间加一个 /,形成一个简单的 URL 连接。
    • 如果只有一个部分(如只给出了前缀或后缀),则补充 /,确保形成有效的 URL。
  3. 去除多余的斜杠

    • 使用正则表达式 regexp.MustCompile("/+") 来匹配一个或多个斜杠,并替换成单一的斜杠 /。这可以有效去除多余的斜杠,确保最终的 URL 结构符合规范。
  4. 输出结果

    • 最终输出拼接并处理后的 URL。

5.3 问题考点

  1. 字符串处理:涉及对字符串的拼接、分割以及空格处理等操作。
  2. 正则表达式:用来匹配和替换多余的斜杠,以确保拼接后的 URL 格式正确。
  3. 边界情况:需要考虑多种输入情况,例如空输入、只有前缀或后缀的情况等,确保程序在这些情况下的表现是符合预期的。
  4. URL 拼接规则:确保拼接规则符合题目要求,包括在不同条件下正确处理斜杠的插入或去重。

5.4 解题步骤

  1. 输入解析

    • 读取输入并用逗号分隔。
    • 如果输入为空,直接输出 /
  2. 拼接 URL

    • 根据输入的分割结果拼接 URL。如果有两个部分,则用一个斜杠 / 连接它们;如果只有一个部分,直接在其后添加一个斜杠。
  3. 正则去重

    • 使用正则表达式 regexp.MustCompile("/+") 查找所有连续的斜杠,并将其替换为单个斜杠 /
  4. 输出拼接后的 URL

    • 输出最终处理过的 URL。

通过这些步骤,可以确保不同输入情况下程序都能返回正确的 URL。

6. 解题Coding

  根据如上题解思路,进行代码实战,大家请看如下,建议不要死记硬背代码,要理解其题型及实现思路,别担心,代码我都会给出超详细注释,你一定能看明白的。

✅6.1 代码实现(Golang版)

package main

import (
	"fmt"
	"regexp"
	"strings"
)

func main() {
	var line string
	fmt.Scanln(&line) // 读取输入行
	solveMethod(line) // 处理拼接 URL
}

// solveMethod 处理URL拼接的主要逻辑
func solveMethod(line string) {
	if line == "" { // 如果输入为空
		fmt.Println("/") // 输出根目录
		return
	}
	
	split := strings.Split(line, ",") // 按逗号分隔输入
	var combine string

	// 判断输入格式,拼接成正确的 URL
	if len(split) >= 2 {
		combine = split[0] + "/" + split[1] // 将两个部分拼接,中间加一个 /
	} else if len(split) == 1 {
		combine = split[0] + "/" // 如果只有一个部分,则加一个 /
	} else {
		combine = "/" // 如果输入为空,输出 /
	}

	// 使用正则去除多余的 /
	reg := regexp.MustCompile("/+")
	url := reg.ReplaceAllString(combine, "/")

	fmt.Println(url) // 输出拼接后的 URL
}

⏱6.2 时间&空间复杂度

  • 时间复杂度: O(n),其中n是输入字符串的长度。主要操作包括字符串分割、拼接和正则替换,这些操作的时间复杂度与输入字符串的长度成正比。
  • 空间复杂度: O(n),需要存储输入字符串、分割后的字符串数组以及最终的结果字符串,所需空间与输入字符串长度成正比。

⛓‍6.3 代码解析

这个程序实现了一个简单的URL拼接功能,主要逻辑如下:

  1. 输入处理:

    • 通过fmt.Scanln()读取一行输入,这相当于Java中的Scanner.nextLine()
    • 输入可能是空字符串或包含逗号分隔的部分URL
  2. URL拼接逻辑:

    • 首先检查输入是否为空,如果是空字符串,直接返回根目录"/"

    • 使用strings.Split()函数按逗号分隔输入,类似于Java的split(",")方法

    • 根据分割后数组的长度进行不同的处理:

      • 如果长度大于等于2,取前两个部分并用"/"连接
      • 如果长度为1,在唯一的部分后添加"/"
      • 如果分割后数组为空(实际上这种情况在前面已经处理过),则返回"/"
  3. URL格式化:

    • 使用正则表达式/+匹配连续的一个或多个斜杠
    • 通过regexp.MustCompile()编译正则表达式
    • 使用ReplaceAllString()方法将所有匹配到的连续斜杠替换为单个斜杠,确保URL格式正确
  4. 输出结果:

    • 最后通过fmt.Println()输出处理后的URL

6.4 小结

这段Go代码完全实现了原Java代码的功能,保持了相同的业务逻辑。主要区别在于Go语言的语法和库函数使用方式:

  1. Go使用fmt.Scanln()代替Java的Scanner.nextLine()进行输入读取
  2. 使用strings.Split()代替Java的split()方法进行字符串分割
  3. 使用Go的正则表达式包regexp代替Java的正则表达式功能,实现多余斜杠的去除
  4. Go不需要显式关闭输入流,因此省略了Java中的scanner.close()

这个实现简洁明了,符合Go语言的编程风格。程序通过检查输入、分割字符串、拼接URL片段和正则表达式替换,有效地解决了URL拼接问题,确保输出的URL格式正确,避免了多余斜杠的出现。代码逻辑清晰,易于理解和维护。

7. 附录源码(Java版)

  针对如上分享OD机试真题之外,这里我还开源全部OD机试原真题源码,供同学们一对一学习!对照每题都有题目号及详细代码注释。Gitee,例如题序号为1,则题解代码对应文件夹OD1,题序号为5,则题解代码对应文件夹OD5,以此类推,目的就是为了方便大家学习,一举上岸!(这里的题序号指专栏导航贴中表格一列的序号)

福利赠与你

  如果你还想学习更多相关OD真题题解,都建议直接毫不犹豫地学习此专栏「最新最全真题华为OD机试真题(全栈版)」,快速掌握Java、Python、C++、JavaScript、Go等多种热门语言详细解题,快速突破华为OD机试,实现350+高分目标。还将提供线上多端答疑交流,解决你的所有问题!

安利其他语言版本题解册

  • 【华为OD机试】最新最全真题汇总A+B+C+D+E卷【全栈版】
  • 【华为OD机试】最新最全真题汇总A+B+C+D+E卷【Java版】
  • 【华为OD机试】最新最全真题汇总A+B+C+D+E卷【Python版】
  • 【华为OD机试】最新最全真题汇总A+B+C+D+E卷【C版】
  • 【华为OD机试】最新最全真题汇总A+B+C+D+E卷【C++版】
  • 【华为OD机试】最新最全真题汇总A+B+C+D+E卷【Golang版】
  • 【华为OD机试】最新最全真题汇总A+B+C+D+E卷【JavaScript版】

注意: 上述任意专栏一次订阅,获永久免费阅读权限,后续更新都能学习。
声明: 拒绝一切形式的代考,替考行为,务必诚信考试!!!本人所写题库均搜集于互联网。

‍Who am I?

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云多年度十佳博主&最具价值贡献奖,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;更多精彩福利点击这里;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。

-End-


你可能感兴趣的:(华为od,golang,算法,华为,华为OD,华为OD机考真题,拼接URL)