首页 > 试题广场 >

单词拆分(二)

[编程题]单词拆分(二)
  • 热度指数:1404 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个字符串 s 和一个字符串数组 dic ,在字符串 s 的任意位置添加任意多个空格后得到的字符串集合是给定字符串数组 dic 的子集(即拆分后的字符串集合中的所有字符串都在 dic 数组中),你可以以任意顺序 返回所有这些可能的拆分方案

数据范围:字符串长度满足 ,数组长度满足 ,数组中字符串长度满足
示例1

输入

"nowcoder",["now","coder","no","wcoder"]

输出

["no wcoder","now coder"]
示例2

输入

"nowcoder",["now","wcoder"]

输出

[]
示例3

输入

"nowcoder",["nowcoder"]

输出

["nowcoder"]
示例4

输入

"nownowcoder",["now","coder"]

输出

["now now coder"]

说明

你可以重复使用 dic 数组中的字符串  
static Set<String> list=new HashSet<>();
    
    public String[] wordDiv (String s, String[] dic) {
        StringBuilder st=new StringBuilder();
        findWord(st,s,dic);
        String[] sa=new String[list.size()];
        list.toArray(sa);
        return sa;
    }
    
    void findWord(StringBuilder ss, String sc, String[] dic){
        if(sc.length()==0){
            ss.delete(ss.length()-1,ss.length());
            list.add(ss.toString());
            ss.append(" ");
            return;
        }
        for(int i=0;i<dic.length;i++){
            if(dic[i].length()<=sc.length()&&sc.substring(0,dic[i].length()).equals(dic[i]))
            {
                ss.append(dic[i]+" ");
                findWord(ss,sc.substring(dic[i].length()),dic);
                ss.delete(ss.length()-dic[i].length()-1,ss.length());
            }
        }
    }

发表于 2022-05-31 19:28:21 回复(0)

问题信息

难度:
1条回答 3382浏览

热门推荐

通过挑战的用户

查看代码