题目:最长公共前缀
链接:https://leetcode-cn.com/problems/longest-common-prefix/
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
例一:
输入:strs = ["flower","flow","flight"]
输出:"fl"
例二:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
思路一:
将每个字符串的对应位置的字符合成一起,进行比对
def longestCommonPrefix(strs):
"""
:type strs: List[str]
:rtype: str
"""
res = ''
for join_str in zip(*strs):
set_str = set(join_str)
if len(set_str) == 1:
res += join_str[0]
else:
break
return res
思路二:
随机取一个字符串,当作公共前缀进行比对,如不匹配则长度减一,依次到无
def longestCommonPrefix(strs):
"""
:type strs: List[str]
:rtype: str
"""
str1 = strs[0]
size = len(strs)
for i in range(1, size):
while strs[i].find(str1) != 0:
str1 = str1[:len(str1)-1]
if not str1:
break
return str1
题目二:删除链表中的节点
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnarn7/
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。
例一:
输入:head = [4,5,1,9], node = 5
输出:[4,1,9]
解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
例二:
输入:head = [4,5,1,9], node = 1
输出:[4,5,9]
解释:给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.
思路:
正常来说我们删除一个链表中的节点,一般会获取要删除的节点的上一节点指针,再将上一节点的指针指向要删除节点的下一节点。
但此题并没有告知上一节点,那么我们可以将要删除的节点的下一节点的值和指针覆盖到现节点上,这样也可以实现删除的效果。
需要注意的是必须先把下一节点的值覆盖到现节点,如果先把下一节点的指针覆盖到现节点,那么原下一节点的值就会消失。
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def deleteNode(self, node):
"""
:type node: ListNode
:rtype: void Do not return anything, modify node in-place instead.
"""
node.val = node.next.val
node.next = node.next.next