在这个问题中,我们将字符串拆分成有意义的单词。我们给了一本字典,看看这个单词是否存在。
我在How to split a string into words. Ex: "stringintowords" -> "String Into Words"?看到了其他一些方法。
我想到了一种不同的方法,并且想知道它是否会起作用。
示例 - itlookslikeasentence
算法
字符串的每个字母对应于DAG中的节点。
将bool数组初始化为False。
在每个节点我们有一个选择 - 如果将当前字母添加到前一个子阵列仍然产生一个有效的单词然后添加它,如果没有,那么我们将从该字母开始一个新单词并设置bool [previous_node ] = True表示一个单词在那里结束。在上面的示例中,bool [1]将设置为true。
这类似于最大子阵列总和问题。
这个算法会起作用吗?
答案 0 :(得分:2)
不,它不会。您的解决方案在每一步都采用尽可能长的单词,但这并不总是有效。
以下是反例:
假设给定的字符串是。您的算法将采用
。然后, <div class="search-home">
<input type="text" onkeypress="gymhandle(event);" class="form-control gym_search" id="gym" name="gym" placeholder="
Search by Name
" >
<div class="autosuggest1"></div>
<div class="autosuggest"></div>
</div>
<script>
function settextbox(rval){
$('.autosuggest').hide();
$('#gym').val(rval);
$('#gym_search2').val(rval);
searchGymByName(rval);
}
$(document).ready(function(){
$('.autosuggest').hide();
$('#gym').keyup(function(e)
{
var code = (e.keyCode || e.which);
// do nothing if it's an arrow key
if(code == 37 || code == 38 || code == 39 || code == 40 || code==13) {
return;
}
var search_term = $(this).val();
var getdata = { 'search_term': search_term};
if(search_term!=''){
$.ajax({
url: "<?php echo site_url('hebrew/searchGymAuto');?>",
data: getdata,
type: 'POST',
success: function(data){
$('.autosuggest').show();
$('.autosuggest').html(data);
}
});
}
else
{
$('.autosuggest').hide();
}
});
});
$('.autosuggest').hide();
function searchGymByName(rval)
{
$('.autosuggest').hide();
var gym_name=rval;
$.ajax({
url:"<?php echo site_url();?>hebrew/searchGym",
type: "POST",
data:{gym_name: gym_name},
success:function(res){
$('html, body').animate({ scrollTop: 0 }, 0);
$("#ajax-map").hide();
$("#city").val('');
$("#city1").val('');
$("#ajax-page-hide").show();
$("#ajax-page-hide").html(res);
}
});
}
将作为有效字。
var usernametest=$("#userName").val()
var letters = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,16}$/;
if(usernametest.match(letters))
{
alert('accepted');
}
else
{
alert('not accepted');
}
不是一个单词,因此它会分割输入:awk '/\\/ && /Script_Command/ {print $0;getline;print $0;next} /Script_Command/ {print $0;next} /\\/ {getline;print $0}'
+ aturtle
。但是,无法将a
拆分为一系列有效的英语单词。正确的答案是t
+ at
。
其中一种可能正确的解决方案是使用动态编程。我们可以定义一个函数atu
,以便at
如果可以将输入的第一个urtle
字符拆分为有效的单词序列。最初,urtle
和其余值为a
。如果turtle
是所有有效f
和f(i) = true
的有效字,则会从i
转换为f(0) = true
。
P.S。其他类型的贪婪算法也不适用于此。例如,如果您使用最短的单词而不是最长的单词,则它无法处理,例如输入false
:无法在f(l)
之后拆分f(r)
被剥离,但s[l + 1, r]
+ l
显然是一个有效的答案。