【golang】leetcode初级-最长公共前缀&删除链表中的节点
第一题 最长公共前缀
题目信息
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成
解题思路
按顺序对字符串切片进行一次遍历,对每个字符串的首个字符进行查找
若字符都相同,则将该字符加入返回的字符串变量,并查找下一字符
若字符不同,则直接返回
代码
func getch(str string,n int)rune{
for i, r := range str {
if i==n{
return r
}
}
return 0
}
func longestCommonPrefix(strs []string) string {
var res string
var n int
var c rune
for {
c=getch(strs[0],n)
for _, str := range strs {
if getch(str,n)==0{return res}
if getch(str,n)!=c{
return res
}
}
res=res+string(c)
n++
}
}
复杂度分析
文章图片
时间复杂度:O(len(res)*len(strs)) 返回的字符串长度每加一,就要多做一边循环;每做一遍循环,就要遍历一次字符串切片的所有字符串;
空间复杂度:O(1) 常数级空间
官方解析
https://leetcode-cn.com/probl...
由于本题难度较低,官方四种答案的执行时间和内存消耗并没有多少显著的差别,在此不做深入讨论
第二题 删除链表中的节点 题目信息
请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。
题目数据保证需要删除的节点 不是末尾节点 。
文章图片
文章图片
文章图片
解题思路
题目的要求为
传入的参数即为指向待删除的节点,且由于是单链表,无法向前访问
题目保证了删除的节点不是末尾节点,提示了我们该节点必定拥有next节点
故
文章图片
代码
func deleteNode(node *ListNode) {
node.Val = node.Next.Val
node.Next = node.Next.Next
}
复杂度分析
时间复杂度:O(1)。
【【golang】leetcode初级-最长公共前缀&删除链表中的节点】空间复杂度:O(1)。
推荐阅读
- 宽容谁
- 我要做大厨
- 增长黑客的海盗法则
- 画画吗()
- 2019-02-13——今天谈梦想()
- 远去的风筝
- 三十年后的广场舞大爷
- 叙述作文
- 20190302|20190302 复盘翻盘
- 学无止境,人生还很长