给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。
返回 合并后的字符串
输入:word1 = "abc", word2 = "pqr"
输出:"apbqcr"
解释:字符串合并情况如下所示:
word1: a b c
word2: p q r
合并后: a p b q c r
class Solution:
def mergeAlternately(self, word1: str, word2: str) -> str:
len1 = len(word1)
len2 = len(word2)
i = j = 0
ans = [] 建立一个空的列表,用于存放合并后的字符串
while i < len1 or j < len2 : 只有两个字符串都完全读取完才结束循环
if i < len1 : 指针指到第一个字符串
ans.append(word1[i]) 将读到的字符加入列表
i+=1 指针向后移动一位
if j < len2 : 同理对第二个字符串进行操作
ans.append(word2[j])
j+= 1
return "".join(ans) 此时ans为列表,所以需要转为字符串返回
找不同
给定两个字符串 s 和 t ,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
示例 1:
输入:s = "abcd", t = "abcde"
输出:"e"
解释:'e' 是那个被添加的字母。
class Solution:
def findTheDifference(self, s: str, t: str) -> str:
count = {} 建立一个空字典,用于统计每个字符所出现的次数
for i in t : 遍历长的字符串
count[i] = count.get(i,0)+1 将字典的键设置为该字母,值先调用之前所定义的值,默认值为0,并加1 通过循环统计每个字母出现的次数
for i in s : 遍历短的字符串
count[i] -= 1 如果这个字母出现过,则值-1,最后相同的字母的值会变为0
for i,freq in count.items() : 值等于1 的就说明是s里没有只在t里的字母
if freq == 1 :
return i
给你一个下标从 0 开始的整数数组 nums ,请你找到 最左边 的中间位置 middleIndex (也就是所有可能中间位置下标最小的一个)。
中间位置 middleIndex 是满足 nums[0] + nums[1] + ... + nums[middleIndex-1] == nums[middleIndex+1] + nums[middleIndex+2] + ... + nums[nums.length-1] 的数组下标。
如果 middleIndex == 0 ,左边部分的和定义为 0 。类似的,如果 middleIndex == nums.length - 1 ,右边部分的和定义为 0 。
请你返回满足上述条件 最左边 的middleIndex ,如果不存在这样的中间位置,请你返回 -1 。
输入:nums = [2,3,-1,8,4]
输出:3
解释:
下标 3 之前的数字和为:2 + 3 + -1 = 4
下标 3 之后的数字和为:4 = 4
class Solution:
def findMiddleIndex(self, nums: List[int]) -> int:
total = sum(nums) 先计算数组全部数的和
left_sum = 0 定义左边之和为0
for i in range (len(nums)) : 遍历整个数组
right_sum = total-left_sum-nums[i] 右边的和为总和-左边的和-当前这个数
if right_sum == left_sum : 如果左边之和等于右边之和,满足条件,返回下标
return i
left_sum += nums[i] 如果不满足,则更新左边之和。
return -1 如果循环结束,没找到返回-1
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5
输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2
输出: 1
示例 3:
输入: nums = [1,3,5,6], target = 7
输出: 4
用二分查找的方法
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
left,right = 0,len(nums) 定义左右端点,左闭右开,右端点取不到
while left < right :
mid = left + (right-left)//2
if nums[mid] == target :
return mid
elif nums[mid] < target :
left = mid + 1 因为mid的值已经判断过不满足条件,所以需要+1
else :
right = mid
return left