#14 Longest Common Prefix
Write a function to find the longest common prefix string amongst an array of strings.
If there is no common prefix, return an empty string
""
.
解题思路:
1.for循环range(最短的元素)作为idx
2.以第一个元素[idx]为比较参照点,对比strs里每一个元素[idx]
3.全部相等的话,存入res里;一旦出现不等,输出res。
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
res = ''
for i in range(min([len(i) for i in strs])):
anchor = strs[0][i]
for element in strs:
if anchor != element[i]:
return res
res += anchor
return res
runtime:
参考16ms的solution:
借用built-in的method,.startswith(value) 可以直接判断是否以value开头,不用挨个字节对比。我可以套用这个,从最短的那个元素第一个字母开始用。万一strs第一个元素很长,他这个办法就要跑很多步。
重写一遍:
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
longest = min(strs, key = lambda i:len(i)) # element with shortest length
for i in strs:
while longest and not i.startswith(longest):
longest = longest[:-1]
return longest
runtime:
再改进了一下,不用str的每个元素都跑一遍看前面开头一部分是否相同,所以不用startswith()了还是挨个字节对比。
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
longest = min(strs, key = lambda i:len(i)) # element with shortest length
res = ''
for i in range(len(longest)):
for j in strs:
if longest[i] != j[i]:
return res
res += longest[i]
return res
runtime:
#344 Reverse String
Write a function that reverses a string. The input string is given as an array of characters
s
.You must do this by modifying the input array in-place with
O(1)
extra memory.
解题思路:
用two pointer的思路的话,就是直接交换值,然后两个pointer都走近一步。
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
left, right = 0, len(s)-1
while left < right:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
runtime:
看一下175ms的思路:
这里我重写是用的 s = s[::-1] 在pycharm里是可以的,但是leetcode就不行。不理解?
还看到可以直接用 .reverse() 绝了。其他和我的pointer思路差不多。先这样。