Python :散列表解法 792. 匹配子序列的单词数

本文介绍了一种高效算法,用于计算字符串数组中作为特定字符串子序列的单词数量。通过使用映射来记录相关信息,该算法避免了不必要的重复计算,显著提高了处理效率。

给定字符串 s 和字符串数组 words, 返回 words[i] 中是s的子序列的单词个数 。

字符串的 子序列 是从原始字符串中生成的新字符串,可以从中删去一些字符(可以是none),而不改变其余字符的相对顺序。

· 例如, “ace” 是 “abcde” 的子序列。

示例 1:

输入: s = “abcde”, words = [“a”,“bb”,“acd”,“ace”]
输出: 3
解释: 有三个是 s 的子序列的单词: “a”, “acd”, “ace”。

基本上是面向样例编程。。。
一开始就想到用正则匹配秒,没想到超时了。然后换了几次算法,最终根据超时样例的规律,设计用map记录的信息,终于过了。

class Solution:
    def numMatchingSubseq(self, s: str, words: List[str]) -> int:
        s_letter_info_map = {}
        word_info_map = {}
        for i,letter in enumerate(s):
            if(letter not in s_letter_info_map): s_letter_info_map[letter] = []
            s_letter_info_map[letter].append(i)

        words_num = 0
        for word in words:
            if(word in word_info_map):
                words_num += 1
                continue
            found_flag = True
            head = -1
            for letter in word:
                if(letter not in s_letter_info_map):
                    found_flag = False
                    break
                pos_found = False
                for pos in s_letter_info_map[letter]:
                    if(pos <= head): continue
                    head = pos
                    pos_found = True
                    break
                if(not pos_found):
                    found_flag = False
                    break

            if(not found_flag): continue
            words_num += 1
            word_info_map[word] = True
            
        return words_num

在这里插入图片描述

### 关于 `java.lang.UnsupportedOperationException` 和 DJL 中 `MxModel.load` 方法的访问权限问题 在 Java 应用程序中,`UnsupportedOperationException` 表明某个方法或操作尚未实现,或者当前上下文中不允许执行此操作。对于 Deep Java Library (DJL),如果遇到 `BaseModel.load` 或 `MxModel.load` 抛出此类异常,则可能是由于以下几个原因之一造成的: 1. **方法未被正确覆盖**:某些情况下,默认接口方法可能并未完全适配子类的实际需求,导致调用时抛出异常[^3]。 2. **不可变集合或其他受限数据结构**:例如,尝试修改由 `Collections.unmodifiableList` 创建的不可变列表会引发类似的异常[^2]。 3. **访问修饰符限制**:如果 `MxModel.load` 被声明为非公共(non-public),则从其他包内的代码无法直接访问该方法[^1]。 基于以上背景信息,下面详细介绍如何诊断并修复这个问题。 --- ### 诊断与解决策略 #### 策略一:确认方法签名及其可见性 首先需核实 `MxModel.load` 是否具有适当的访问控制级别。通常来说,框架的核心 API 应公开暴露给用户以便集成到自己的项目里去。然而假如发现它的定义形如: ```java protected void load(Path path) throws IOException {...} ``` 那么意味着除非继承自这个类否则就不可能正常使用它。此时有两种途径可供选择——要么请求官方团队开放更多灵活性;要么寻找替代方案比如利用工厂函数生成预配置好的实例再传递过来。 #### 策略二:改用静态辅助工具类加载模型 考虑到直接实例化可能存在困难,推荐考虑是否存在配套提供的实用工具类用于简化流程。例如,许多机器学习库都会封装好一系列便于使用的静态方法来帮助快速导入导出模型文件而不需要担心底层细节太多。以伪代码为例展示如下: ```java // 假设存在这样一个全局可用的入口点 public static BaseModel loadModel(String modelName, Device device){ // 内部逻辑处理... } // 用户只需简调用即可获得所需成果 BaseModel myLoadedModel = SomeUtilityClass.loadModel("myCustomModelName", Device.cpu()); ``` #### 策略三:自行扩展基底类别增加定制功能 最后也是比较激进的一种办法就是自己重新定义一个新的派生类型,在其中补充缺少的功能特性。当然这样做之前务必要充分理解原版的设计意图以免破坏原有稳定性。举个例子说明一下过程大致如下: ```java class EnhancedMxModel extends MxModel{ @Override public void load(Path path)throws IOException{ super.load(path); // 如果父级确实有相应动作的话继续沿袭下来 // 可在此基础上叠加额外步骤满足个性化诉求 } } ``` 随后就可以放心大胆地按照常规套路操作啦! --- ### 总结陈词 总而言之,针对 `java.lang.UnsupportedOperationException` 导致的 `MxModel.load` 失败现象,可以从多个角度切入加以应对。无论是调整源码提升兼容程度也好,还是巧妙借用既有设施规避麻烦也罢,关键是找到最适合当下环境状况的那一套组合拳出击才行哦~ --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值