【力扣】面试题 17.15. 最长单词
题目描述

思路分析
回溯
最开始没想到思路,然后看了一眼提示
提示
- 简化题目,如果要求的字符串只由两个其他的字符串构成,解法:枚举两两可能性
- 扩展到多个字符串,解法:寻找分割点
首先将字符串数组排序:毕竟是求最长的,找到就不找了
- 长度相等,字典序小的在前
- 长度不等,长度长的在前
将字符串存入hash表
mp,方便查找遍历字符串数组,寻找可能的解
对于字符串数组中的每一个值
- 都回溯找一下是否能得到答案
- 按长度递减找分割点,分成两份,即
cur和next- 如果
cur在mp中,继续判断next - 如果不在,直接寻找下一个分割点
- 按长度递减是因为
- 如果长的满足,且后续满足就不要考虑短的;如果长的不满足,还有机会考虑长的
- 反之,如果先考虑短的,就不存在计划考虑长的了,至少下面的代码不能
- 如用例
["cat","banana","dog","nana","walk","walker","dogwalker"]
- 如果
- 如果找到一个值,退出循环,直接返回结果
注意回溯的退出条件时,剩余的串为空
为了避免找到由自身构成的最长串,还需要一个额外的变量记录
cnt当前使用的字符串数量
1 | class Solution { |

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 cv-programmer!







