由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - Split a String into valid English words
相关主题
问个ArrayList的问题another Java interview Question
问一道关于Vector的题java 截取一部分string
Simple question: delete element from collection on condition?我自己编了个Java面试题
问HashSet的问题?这个有 bug 吗
学以致用,但多此一举?Re: 怎样递归操作目录,子目录以及他们下面的文件?
如何遍历hashtable里边的每一项?java 的内存分布?
如何确保每次读入的字符串都是unique的Recusion is fucking magic!!
问个set和literal String的问题JAVA里什么METHOD是用来STRING PATTERN SEARCH
相关话题的讨论汇总
话题: string话题: dictionary话题: substr话题: segmented话题: str
进入Java版参与讨论
1 (共1页)
l******0
发帖数: 244
1
如果一个词典 Dictionary 包含英文中的单词,将一个 String 分割为合法的单词。假
设 Dictionary 存在一个 HashSet 中。
String str = "Iloveyou"
分割为 "I love you".
String segment(String str, HashSet dictionary){
String segmented="";

// Iloveyou
int size = str.length()+1;
int j = 0;
int i;
for(i=1; i String subStr = str.substring(j,i);
if(dictionary.contains(subStr)){
segmented += subStr + " ";
j = i;
}
}
if(j==i-1){
return segmented;
}else{
return null;
}
}
谁能写一个 recursive 的版本?
f*******n
发帖数: 12623
2
iterative当然比recursive好
l******0
发帖数: 244
3
如果输入是 "goodsdelivery", 输出就是 good-s-delivery, 上面那个就不好。这时候
最好匹配字典中长度最大的单词,得到 goods-delivery。这种情况下,那个
iterative 的 function 就比较难处理。

【在 f*******n 的大作中提到】
: iterative当然比recursive好
W***o
发帖数: 6519
4
it could also be good-sde-liver-y ?

【在 l******0 的大作中提到】
: 如果输入是 "goodsdelivery", 输出就是 good-s-delivery, 上面那个就不好。这时候
: 最好匹配字典中长度最大的单词,得到 goods-delivery。这种情况下,那个
: iterative 的 function 就比较难处理。

l******0
发帖数: 244
5
Possible, but unlikely, since 'sde' shouldn't be an entry in a 'normal'
dictionary. Here want to focus on the algorithm itself, although 'sde' could
be an entry in a domain specific dictionary.

【在 W***o 的大作中提到】
: it could also be good-sde-liver-y ?
l*******m
发帖数: 1096
6
你这个有问题...比如“nationalpark”. 应该是"national park"
但是你的只会返回null

【在 l******0 的大作中提到】
: 如果一个词典 Dictionary 包含英文中的单词,将一个 String 分割为合法的单词。假
: 设 Dictionary 存在一个 HashSet 中。
: String str = "Iloveyou"
: 分割为 "I love you".
: String segment(String str, HashSet dictionary){
: String segmented="";
:
: // Iloveyou
: int size = str.length()+1;
: int j = 0;

p*****2
发帖数: 21240
7
这个算法根本就不对吧。
l******0
发帖数: 244
8
是,取决于词典;先找到 nation, 然后剩下的 alpark 找不到一个 match, 切分不完
整,所以返回 null
所以,最好是找最大单词来匹配。一个实际可用的 segmenter,最大匹配也有问题,最
佳的需要用到概率,也就是额外的数据来支持最优选择。
这里只想练习下算法,所以上面的可行。

【在 l*******m 的大作中提到】
: 你这个有问题...比如“nationalpark”. 应该是"national park"
: 但是你的只会返回null

l******0
发帖数: 244
9
你给个 working 的 recursive 的。

【在 p*****2 的大作中提到】
: 这个算法根本就不对吧。
l******0
发帖数: 244
10
确实有问题, 简单化了

【在 l*******m 的大作中提到】
: 你这个有问题...比如“nationalpark”. 应该是"national park"
: 但是你的只会返回null

p*****2
发帖数: 21240
11

dict =
'I': true
'love': true
'you': true

dfs = (str, curr, res)->
if curr is str.length
return console.log res.join(" ")

for i in [curr...str.length]
sub = str[curr..i]
if dict[sub]
res.push sub
dfs str, i+1, res
res.pop

break_word = (str)->
dfs str, 0, []
break_word "Iloveyou"

【在 l******0 的大作中提到】
: 你给个 working 的 recursive 的。
b*******s
发帖数: 5216
12
你这个字典效率太差了,推荐你看看suffix tree

【在 l******0 的大作中提到】
: 如果一个词典 Dictionary 包含英文中的单词,将一个 String 分割为合法的单词。假
: 设 Dictionary 存在一个 HashSet 中。
: String str = "Iloveyou"
: 分割为 "I love you".
: String segment(String str, HashSet dictionary){
: String segmented="";
:
: // Iloveyou
: int size = str.length()+1;
: int j = 0;

g*******t
发帖数: 7704
13
这个问题如果深究,就复杂了, 还牵扯到拼写错误, 相识程度,
人工智能问题,
l*******m
发帖数: 1096
14
牛人写的就是漂亮。这是一道经典的data scientist的考题

【在 p*****2 的大作中提到】
:
: dict =
: 'I': true
: 'love': true
: 'you': true
:
: dfs = (str, curr, res)->
: if curr is str.length
: return console.log res.join(" ")
:

1 (共1页)
进入Java版参与讨论
相关主题
JAVA里什么METHOD是用来STRING PATTERN SEARCH学以致用,但多此一举?
Java 问题,请教如何找出一个array里的duplicate segments? (转载)如何遍历hashtable里边的每一项?
要随机返回一个Set的里的元素, 如何操作呢?如何确保每次读入的字符串都是unique的
Why java.lang.Iterable depends on java.util.Iterator问个set和literal String的问题
问个ArrayList的问题another Java interview Question
问一道关于Vector的题java 截取一部分string
Simple question: delete element from collection on condition?我自己编了个Java面试题
问HashSet的问题?这个有 bug 吗
相关话题的讨论汇总
话题: string话题: dictionary话题: substr话题: segmented话题: str