【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++
    }
}

复杂度分析

【golang】leetcode初级-最长公共前缀&删除链表中的节点_第1张图片
时间复杂度:O(len(res)*len(strs)) 返回的字符串长度每加一,就要多做一边循环;每做一遍循环,就要遍历一次字符串切片的所有字符串;
空间复杂度:O(1) 常数级空间

官方解析

https://leetcode-cn.com/probl...
由于本题难度较低,官方四种答案的执行时间和内存消耗并没有多少显著的差别,在此不做深入讨论

第二题 删除链表中的节点

题目信息

请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。

题目数据保证需要删除的节点 不是末尾节点 。

【golang】leetcode初级-最长公共前缀&删除链表中的节点_第2张图片
【golang】leetcode初级-最长公共前缀&删除链表中的节点_第3张图片
【golang】leetcode初级-最长公共前缀&删除链表中的节点_第4张图片

解题思路

题目的要求为
传入的参数即为指向待删除的节点,且由于是单链表,无法向前访问
题目保证了删除的节点不是末尾节点,提示了我们该节点必定拥有next节点

【golang】leetcode初级-最长公共前缀&删除链表中的节点_第5张图片

代码


func deleteNode(node *ListNode) {
    node.Val = node.Next.Val
    node.Next = node.Next.Next
}

复杂度分析

时间复杂度:O(1)。

空间复杂度:O(1)。

你可能感兴趣的:(【golang】leetcode初级-最长公共前缀&删除链表中的节点)