拼接2个字符串
题目描述
给出字符串a和b,输出a和b交叉后的字符串。对该程序进行测试用例的设计。
示例
输入:给定'abdhsn','des'
返回值:'adbedshsn'
解题思路
遍历较短的那个字符串,按顺序插入列表中,再转换为字符串
def mergeString(a, b):
if not isinstance(a, str):
raise TypeError("a is not str")
if not isinstance(b, str):
raise TypeError("b is not str")
if not a and not b: return ''
if not a: return b
if not b: return a
la = len(a)
lb = len(b)
result = []
if la <= lb:
for i in range(la):
result.append(a[i])
result.append(b[i])
return ''.join(result) + b[i+1:]
else:
for i in range(lb):
result.append(a[i])
result.append(b[i])
return ''.join(result) + a[i+1:]
- 时间复杂度:O(n)
- 空间复杂度:O(n)
找出长度最长的纯字母
题目描述
给你一串字符串包含数字字母特殊符号,找出其中长度最长的纯字母。例:
示例
输入:‘12345abcdef¥%abde&*234hurry@#’
返回值:‘abcdef’
解题思路
正则匹配所有纯字母的字符串,返回长度最长的一个
import re
def findLongestStr(s):
pattern = re.compile(r'[a-zA-Z]+')
s1 = re.findall(pattern, s)
max_len = max(len(i) for i in s1)
result = []
for i in range(len(s1)):
if len(s1[i]) == max_len:
result.append(s1[i])
return result
- 时间复杂度:O(n)
- 空间复杂度:O(n)
寻找峰值
题目描述
峰值元素是指其值大于左右相邻值的元素。
给你一个输入数组nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。
你可以假设nums[-1] = nums[n] = -∞ 。
示例
输入:nums = [1,2,1,3,5,6,4]
返回值:1或5
解释:你的函数可以返回索引 1,其峰值元素为2;或者返回索引 5, 其峰值元素为 6。
解题思路1
找到列表中的最大值,肯定为峰值,返回其索引即可
def findPeakElement(nums):
l = len(nums)
if l == 1:return 0
m = max(nums)
for i, num in enumerate(nums):
if num == m:
return i
def findPeakElement(nums):
return nums.index(max(nums))
- 时间复杂度:O(n)
- 空间复杂度:O(1)
解题思路2
由于题目假设nums[-1]=nums[n]=-∞。所以,我们从0开始往后遍历元素,如果某个元素大于其后面的元素,则该元素就是峰值元素。因为如果当前元素小于前一个元素,那么当前元素肯定不是峰值,所以只要循环判断是否大雨其后面的元素即可。如果遍历完发现没有满足条件的元素,则返回最后一个元素索引即可,因为nums[n] = -∞ 。
def findPeakElement(nums):
l = len(nums)
if l == 1:return 0
for i in range(l-1):
if nums[i] > nums[i+1]:
return i
return l-1
- 时间复杂度:O(n)
- 空间复杂度:O(1)
解题思路3
二分查找法 规律一:如果nums[i] > nums[i+1],则在i之前一定存在峰值元素 规律二:如果nums[i] < nums[i+1],则在i+1之后一定存在峰值元素
def findPeakElement(nums):
left = 0
right = len(nums)-1
while left < right:
mid = left + int((right-left)/2)
if nums[mid] > nums[mid+1]:
right = mid
else:
left = mid + 1
return left
- 时间复杂度:O(logN)
- 空间复杂度:O(1)
找出字符串中出现最多的元素及出现次数
题目描述
给定一个字符串,找出其中出现次数最多的元素及次数
示例
输入:给定'abcdeeffffuueeee'
返回值:(['f','e'], 4)
解题思路
定义一个max_num和max_letters,如果元素次数大于max_num,则清空max_letters,如果等于,则放入max_letters。最终输出时对元素进行重复元素的过滤。
def findMosttimesStr(s):
if not s: return None
max_num = 0
max_letters = []
for i in s:
if s.count(i) > max_num:
max_letters = []
max_num = s.count(i)
elif s.count(i) == max_num:
max_letters.append(i)
if max_num == 1 : return (s, 1)
return (list(set(max_letters)), max_num)
- 时间复杂度:O(n)
- 空间复杂度:O(n)
找出字符串中出现最多的元素及出现次数
题目描述
给定一个字符串,找出其中出现次数最多的元素及次数
示例
输入:给定'abcdeeffffuueeee'
返回值:(['f','e'], 4)
解题思路
定义一个max_num和max_letters,如果元素次数大于max_num,则清空max_letters,如果等于,则放入max_letters。最终输出时对元素进行重复元素的过滤。
def findMosttimesStr(s):
if not s: return None
max_num = 0
max_letters = []
for i in s:
if s.count(i) > max_num:
max_letters = []
max_num = s.count(i)
elif s.count(i) == max_num:
max_letters.append(i)
if max_num == 1 : return (s, 1)
return (list(set(max_letters)), max_num)
- 时间复杂度:O(n)
- 空间复杂度:O(n)