Go语言
雨山摆渡人.
这个作者很懒,什么都没留下…
展开
-
一次编辑 Go语言
面试题 01.05. 一次编辑 Go语言题目:字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。func oneEditAway1(first string, second string) bool { if diff := len(first) - len(second); diff < -1 || diff > 1 { return false } for i, j, com := 0,原创 2022-05-13 10:35:21 · 96 阅读 · 0 评论 -
二进制间距 Go语言
二进制间距题目:给定一个正整数 n,找到并返回 n 的二进制表示中两个相邻 1 之间的最长距离 。如果不存在两个相邻的 1,返回 0 。如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,"1001" 中的两个 1 的距离为 3 。// 双指针法func binaryGap(n int) int { s := fmt.Sprintf("%b", n) distance, temp := 0,原创 2022-04-24 10:34:20 · 127 阅读 · 0 评论 -
插入后的最大值 Go语言
插入后的最大值题目:给你一个非常大的整数 n 和一个整数数字 x ,大整数 n 用一个字符串表示。n 中每一位数字和数字 x 都处于闭区间 [1, 9] 中,且 n 可能表示一个负数 。你打算通过在 n 的十进制表示的任意位置插入 x 来 最大化 n 的数值 。但不能在负号的左边插入 x 。例如,如果 n = 73 且 x = 6 ,那么最佳方案是将 6 插入 7 和 3 之间,使 n = 763 。如果 n = -55 且 x = 2 ,那么最佳方案是将 2 插在第一个原创 2022-04-23 15:40:39 · 184 阅读 · 0 评论 -
山羊拉丁文 Go语言
山羊拉丁文题目:给你一个由若干单词组成的句子 sentencesentencesentence ,单词间由空格分隔。每个单词仅由大写和小写英文字母组成。请你将句子转换为 “山羊拉丁文(GoatGoatGoat LatinLatinLatin)”(一种类似于 猪拉丁文 PigPigPig LatinLatinLatin 的虚构语言)。山羊拉丁文的规则如下:如果单词以元音开头('a', 'e', 'i', 'o', 'u'),在单词后添加"ma"。例如,单词 "apple" 变为 "appl原创 2022-04-21 16:17:32 · 159 阅读 · 0 评论 -
字符的最短距离 Go语言
字符的最短距离题目:给你一个字符串 sss 和一个字符 ccc ,且 ccc 是 sss 中出现过的字符。返回一个整数数组 answeransweranswer ,其中 answer.length == s.length 且 answer[i] 是 sss 中从下标 i 到离它最近的字符 ccc 的距离 。两个下标 i 和 j 之间的 距离 为 abs(i - j) ,其中 abs 是绝对值函数// 双指针法,记录每次字符 c 出现的位置和上一次出现的位置,同时每次更新最近距离数组原创 2022-04-19 17:26:32 · 187 阅读 · 0 评论 -
字典序排数 Go语言
字典序排数题目:给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。// 深度优先遍历func lexicalOrder(n int) []int { ans := make([]int, 0, n) for i, num := 0, 1; i < n; i++ { ans = append(ans, num) if num*10 <= n { num *= 10 } e原创 2022-04-18 10:27:49 · 372 阅读 · 0 评论 -
合并两个有序数组 Go语言
合并两个有序数组题目:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。// 合并两原创 2022-04-18 09:15:16 · 2142 阅读 · 0 评论 -
删除有序数组中的重复项 Go语言
删除有序数组中额重复项题目:给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。元素的相对顺序应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个位置后返回 k 。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成原创 2022-04-15 10:07:37 · 497 阅读 · 0 评论 -
括号匹配 Go语言
括号匹配 Go语言题目:给定一个只包括'(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。// 利用 map 和栈func isValid(s string) bool { n := []byte{} if len(s)%2 == 1 { return false } bracket := map[byte]byte{ ')': '(', ']':原创 2022-04-15 09:48:21 · 374 阅读 · 0 评论 -
最后一个单词的长度 Go语言
最后一个单词的长度 Go语言题目:给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词:是指仅由字母组成、不包含任何空格字符的最大子字符串。这里为大家介绍三种方法,直接上代码// 利用Go语言内置函数将字符串转化为数组,然后反向寻找第一个不是空格的元素,返回该元素的长度func lengthOfLastWord1(s string) int { m := strings.Split(s, " ") for m[len(m)-1] == ""原创 2022-04-12 10:02:04 · 499 阅读 · 0 评论 -
利用Go语言实现KMP算法
利用Go语言实现KMP算法原创 2022-04-10 12:36:38 · 1263 阅读 · 0 评论