Python每日五道练手试题以及日常解析(一)

题目1:写一个函数,输入一个字符串,返回该字符串中出现次数最多的字符及其出现次数。

答案1:

def most_frequent_char(s):
    char_count = {}
    for char in s:
        if char in char_count:
            char_count[char] += 1
        else:
            char_count[char] = 1
    
    max_count = max(char_count.values())
    most_frequent_char = [char for char, count in char_count.items() if count == max_count]
    
    return most_frequent_char, max_count

s = "abccdefggg"
result = most_frequent_char(s)
print(result)

解题思路:遍历字符串,使用一个字典来统计每个字符出现的次数,然后找出出现次数最多的字符及其出现次数。

题目2:写一个函数,判断一个字符串是否是回文串(忽略大小写和非字母字符)。

答案2:

def is_palindrome(s):
    s = ''.join(char.lower() for char in s if char.isalnum())
    return s == s[::-1]

s = "A man, a plan, a canal, Panama"
result = is_palindrome(s)
print(result)

解题思路:先将字符串中的非字母字符去除并转换为小写,然后判断反转后的字符串是否和原字符串相等。

题目3:写一个函数,输入一个整数数组和一个目标值,找出数组中和为目标值的两个数的索引。

答案3:

def two_sum(nums, target):
    num_dict = {}
    for i, num in enumerate(nums):
        complement = target - num
        if complement in num_dict:
            return [num_dict[complement], i]
        num_dict[num] = i

nums = [2, 7, 11, 15]
target = 9
result = two_sum(nums, target)
print(result)

解题思路:遍历数组,使用一个字典来存储每个数及其索引,同时查找是否存在与当前数相加等于目标值的数。

题目4:实现一个简单的计算器,可以进行加减乘除四则运算,输入为一个包含数字和运算符的字符串。

答案4:

def calculator(s):
    stack = []
    num = 0
    sign = '+'
    for i in range(len(s)):
        if s[i].isdigit():
            num = num * 10 + int(s[i])
        if (not s[i].isdigit() and s[i] != ' ') or i == len(s) - 1:
            if sign == '+':
                stack.append(num)
            elif sign == '-':
                stack.append(-num)
            elif sign == '*':
                stack[-1] *= num
            elif sign == '/':
                stack[-1] = int(stack[-1] / num)
            sign = s[i]
            num = 0
    return sum(stack)

s = "3+2*2"
result = calculator(s)
print(result)

解题思路:使用栈来保存数字,遍历字符串,遇到数字则累加,遇到运算符则根据前一个运算符进行相应计算。

题目5:实现一个函数,输入一个整数数组,返回一个新数组,新数组中的每个元素为原数组中除了自身以外所有元素的乘积。

答案5:

def product_except_self(nums):
    n = len(nums)
    output = [1] * n
    left_product = 1
    right_product = 1
    
    for i in range(n):
        output[i] *= left_product
        left_product *= nums[i]
        
    for i in range(n-1, -1, -1):
        output[i] *= right_product
        right_product *= nums[i]
        
    return output

nums = [1, 2, 3, 4]
result = product_except_self(nums)
print(result)

解题思路:使用两个额外的数组来保存每个元素左边和右边的乘积,然后将左右乘积相乘得到最终结果。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值