字符串按照给定规则切割为单词列表输出,求教?

题目大致如此,给定一个函数 split, 入参分别为字符串 text 和 一个单词集合 dic ,然后输出 text 根据 dic 里面的单词切割出来的数组,比如:

例子1:

  • 字符串text为: 'appleddesktop'
  • 单词集合dict为: set(['a', 'app', 'apple', 'led', 'desk', 'top'])
  • 输出: ['app', 'led', 'desk', 'top']

例子2:

  • 字符串text为: 'appledesktop'
  • 单词集合dict为: set(['a', 'app', 'apple', 'led', 'desk', 'top'])
  • 输出: ['apple', 'desk', 'top']

「可以发现当输出的数组再转为字符串的时候,和输入的 text 一模一样且字符顺序一致。」
请设计代码实现如上所述的逻辑,不限语言。

有没有好的实现方式?PS: 大佬轻点虐。

阅读 2.2k
2 个回答

https://leetcode.cn/problems/...
这道题类似

var wordBreak = function (text, wordDict) {
      const len = text.length
      const dp = new Array(len).fill(false)
      const map = {}
      wordDict.forEach(item => map[item] = true)
      
      for (let i = 0; i < len; i++) {
        let str = ''
        for (let j = i; j < len; j++) {
          str += text[j]
          if (map[str] && (i === 0 || dp[i - 1])) {
            dp[j] = [].concat(dp[i - 1] || [], str)
            if (j === len - 1) {
              return dp[len - 1]
            }
          }
        }
      }
      return null
    };
    wordBreak('appleddesktop', ['a', 'app', 'apple', 'led', 'desk', 'top'])

根据上面的js版本代码,改写成了python版本的,仅供参考:

def split_word_disordered(text: str, word_dic: set | list) -> list | None:
    length = len(text)
    dp = [False] * length
    dict_c = {}

    for word in word_dic:
        dict_c[word] = True

    for i in range(length):
        str_var = ""

        for j in range(i, length):
            str_var += text[j]

            if dict_c.get(str_var) and (i == 0 or dp[i - 1]):
                if dp[i - 1]:
                    dp[j] = []
                    dp[j].extend([*dp[i - 1], str_var])
                else:
                    dp[j] = [str_var]

                if j == length - 1:
                    return dp[j]

    return None
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏