当前位置: 首页> 科技> 名企 > 【Hot100】LeetCode—139. 单词拆分

【Hot100】LeetCode—139. 单词拆分

时间:2025/7/12 17:05:01来源:https://blog.csdn.net/weixin_44382896/article/details/142131223 浏览次数:0次

目录

  • 1- 思路
    • 题目识别
    • 完全背包-动规五部曲
  • 2- 实现
    • 单词拆分——题解思路
  • 3- ACM 实现

  • 原题链接:139. 单词拆分

1- 思路

题目识别

  • 识别1 :字符串 和一个 字符串数组 判断
  • 识别2:判断字符串能不能由字符串数组拼接形成,返回 truefalse

完全背包-动规五部曲

拆分时可以重复使用字典中的单词,可以看为是一个完全背包的问题

思路:①布尔类型的 dp 数组、②定 i(从1开始) 移动 j(从 0 开始);通过 substring(j,i) 区间内的字符串,判断是否在 wordDict 中,如果在则置 dp[i]true


2- 实现

单词拆分——题解思路

在这里插入图片描述

class Solution {public boolean wordBreak(String s, List<String> wordDict) {// 1. 定义 dp 数组// 含义 dp[i] 代表以 i 结尾的字符串能否由 数组内容组成int len = s.length();boolean[] dp = new boolean[len+1];// 2.递推公式// substring(j,i) 有的话 dp[i] = true;// 3. 初始化dp[0] = true;for(int i = 1 ; i <= len;i++){for(int j = 0 ; j < i ; j++){if(wordDict.contains(s.substring(j,i)) && dp[j]){dp[i] = true;}}}return dp[len];}
}

3- ACM 实现

public class wordSplit {public static boolean splitWord(String s,List<String> wordDict){// 1. 定义 dp 数组int len = s.length();boolean[] dp = new boolean[len+1];// 2.递推公式// if(dp[j] && s.substring(j,i))// 3.初始化dp[0] = true;for(int i = 1 ; i <= len;i++){for(int j = 0 ; j < i ;j++){if(dp[j] && wordDict.contains(s.substring(j,i))){dp[i] = true;}}}return dp[len];}public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("输入字符串");String input = sc.nextLine();System.out.println("输入字符数组长度");int n = sc.nextInt();List<String> list = new ArrayList<>();String konge = sc.nextLine();for(int i  = 0 ; i < n;i++){String str = sc.nextLine();list.add(str);}System.out.println("结果是"+splitWord(input,list));}
}

关键字:【Hot100】LeetCode—139. 单词拆分

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: