面试:字符串:产生括号

题目

根据字典,从一个抹去空格字符串里提取全部单词组合,并拼接成完整的句子
例如:
thisisanexample
this is an example


算法

  • 从找第一个单词
  • 递归
  • 利用哈希记录以及做好的分词(加速)


public class Solution{
    public ArrayList<String> tokenizeString(String input, HashSet<String> d,HashMap<String,ArrayList<String>> memorized){

        ArrayList<String> res=new ArrayList<String>();
        if(input==null || input.length()==0)
            return res;
        //从保存结结果中找出提取后的单词,加快提取速度
        if(memorized.containsKey(input))
            return memorized.get(input);

        if(d.contains(input))
            res.add(input); //如果整个串就是一个单词,将其加入结果

        int len=input.length();

        for(int i=1;i<len;i++){
            String prefix=input.substring(0,i);
            if(d.contains(prefix)){
                //如果这个前缀是一个单词,递归调用函数
                for(String segsuffix: tokenizeString(input.substring(i,len),d,memorized)){
                    if(segsuffix!=null)
                        //如果后面也能提取单词,则将其加入结果
                        res.add(prefix+" "+segsuffix);
                }
            }
        }

        memorized.put(input,res);
        return res;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值