今日算法学习小结

给你两个字符串 word1word2 。请你从 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(word1i) 将读到的字符加入列表

i+=1 指针向后移动一位

if j < len2 : 同理对第二个字符串进行操作

ans.append(word2j)

j+= 1

return "".join(ans) 此时ans为列表,所以需要转为字符串返回

找不同

给定两个字符串 st ,它们只包含小写字母。

字符串 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 : 遍历长的字符串

counti = count.get(i,0)+1 将字典的键设置为该字母,值先调用之前所定义的值,默认值为0,并加1 通过循环统计每个字母出现的次数

for i in s : 遍历短的字符串

counti -= 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: Listint) -> int:

total = sum(nums) 先计算数组全部数的和

left_sum = 0 定义左边之和为0

for i in range (len(nums)) : 遍历整个数组

right_sum = total-left_sum-numsi 右边的和为总和-左边的和-当前这个数

if right_sum == left_sum : 如果左边之和等于右边之和,满足条件,返回下标

return i

left_sum += numsi 如果不满足,则更新左边之和。

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: Listint, target: int) -> int:

left,right = 0,len(nums) 定义左右端点,左闭右开,右端点取不到

while left < right :

mid = left + (right-left)//2

if numsmid == target :

return mid

elif numsmid < target :

left = mid + 1 因为mid的值已经判断过不满足条件,所以需要+1

else :

right = mid

return left

相关推荐
cypking1 小时前
Objective-C 语法完整学习手册(小白自学 + 开发备查)
c语言·开发语言·学习·objective-c
Terra.K8 小时前
Java异常学习[特殊字符]
java·开发语言·学习
zjnlswd15 小时前
C#学习笔记4
笔记·学习·c#
minglie115 小时前
在linux环境烧录esp8266
学习
xqqxqxxq16 小时前
AI Agent学习:MCP与工具生态:工具选择的挑战(李博杰《深入理解 AI Agent》4.3观后总结)
人工智能·学习
青山是哪个青山16 小时前
LangChain 学习笔记(九):上下文与记忆
笔记·学习·langchain
KaKa_大王17 小时前
关于秒杀项目的一些理解
java·学习
Z59981784117 小时前
c#软件开发学习笔记--Modbus-TCP/UDP网口通讯
笔记·学习·c#
zyf10441618 小时前
暑期实践日志 Day29:根据修改要求,进行视频字幕添加
学习·计算机网络·剪辑·暑期实践·课题任务
田径他爸来了19 小时前
嵌入式学习第27天——线程(创建,执行,退出)
java·开发语言·学习