面试:字符串:产生括号
2016-06-06 17:31
288 查看
题目
根据字典,从一个抹去空格字符串里提取全部单词组合,并拼接成完整的句子例如:
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; }
相关文章推荐
- 剑指offer-面试题8:旋转数组中的最小数字
- 面试题:不用第三变量交换ab值
- 剑指Offer----面试题26:复杂链表的复制
- 面试中常见链表问题13:回文链表
- 链表面试题之合并有序的两个线性表-递归和非递归的方法
- 奋斗吧,程序员——第五十二章 我欲与君相知,长命无绝衰
- Java程序员必须掌握的排序算法Java实现整合二 :选择排序
- 面试中常见链表问题12:单链表反转(递归)
- 黑马程序员:为苹果与iOS开发者的前景正名
- 面试中常见链表问题11:在链表中删除给定元素值的节点
- 面试中常见链表问题10:交叉链表的第一个公共节点
- 黑马程序员:iOS开发行业为何“大不如前”
- 面试中常见链表问题9:对单链表进行插入排序
- 面试中常见链表问题8:重排链表
- 【LeetCode】Best Time to Buy and Sell Stock 程序员炒股 part.3
- 面试中常见链表问题7:反转链表2
- Java陷阱一箩筐----面试题集
- 程序员需要了解的东西-备
- hive面试问题
- 史上最强女游戏程序员