You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现find_last函数:不使用len()查找目标串最后出现位置

不用len()实现find_last函数的解决方案

嘿,我明白你现在的困境了——不用len()函数来写这个找最后匹配位置的函数确实有点绕,不过咱们一步步来搞定它!

首先,先纠正你代码里的明显问题:你把target = search这行写进去了,这会直接把搜索字符串覆盖成目标字符串,完全偏离了需求,得先把这行删掉才行。

接下来,咱们梳理实现思路:因为不能用len(),所以得手动计算字符串的长度,再从后往前遍历搜索字符串,检查每个可能的起始位置是否匹配目标字符串,找到第一个匹配的位置(也就是最后出现的那个)就返回,遍历完没找到就返回-1。

完整实现代码

def find_last(search, target):
    # 手动计算目标字符串的长度,替代len()
    target_len = 0
    for char in target:
        target_len += 1
    
    # 处理目标字符串为空的边界情况(按Python内置rfind逻辑返回搜索串长度)
    if target_len == 0:
        search_len = 0
        for char in search:
            search_len += 1
        return search_len
    
    # 手动计算搜索字符串的长度
    search_len = 0
    for char in search:
        search_len += 1
    
    # 如果目标比搜索字符串长,直接返回-1
    if target_len > search_len:
        return -1
    
    # 从最后一个可能的起始位置开始倒序检查
    start_pos = search_len - target_len
    while start_pos >= 0:
        # 截取当前起始位置的子串(和目标长度一致)
        current_sub = ""
        for i in range(target_len):
            current_sub += search[start_pos + i]
        
        if current_sub == target:
            return start_pos
        
        start_pos -= 1
    
    # 遍历完无匹配,返回-1
    return -1

代码细节解释

  • 手动计算长度:通过遍历字符串的每个字符,用计数器累加的方式获取长度,完美替代len()的功能。
  • 边界场景处理:提前判断目标为空、目标比搜索串长的情况,避免无效遍历。
  • 倒序匹配逻辑:从最后一个可能匹配的起始位置开始检查,一旦找到匹配就返回,这就是目标字符串最后出现的位置。
  • 子串匹配:通过循环拼接子串来对比,完全不依赖len()相关的切片操作。

测试验证

运行find_last('aaaa', 'a')时,会计算出target_len=1、search_len=4,起始位置从3开始检查,search[3:4]正好是'a',匹配成功后返回3,完全符合题目要求。

如果你想让代码更简洁,可以把长度计算逻辑抽成辅助函数复用:

def get_str_length(s):
    count = 0
    for _ in s:
        count += 1
    return count

def find_last(search, target):
    target_len = get_str_length(target)
    search_len = get_str_length(search)
    
    if target_len == 0:
        return search_len
    if target_len > search_len:
        return -1
    
    start_pos = search_len - target_len
    while start_pos >= 0:
        if search[start_pos:start_pos+target_len] == target:
            return start_pos
        start_pos -= 1
    return -1

这个版本逻辑更清晰,同样没有用到len()函数,测试结果一致。

内容的提问来源于stack exchange,提问作者user4219935

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:01:16