helper
можно вызывать с другим параметром value
для одного и того же index
. Таким образом, value
должно быть удалено (вычтено из сохраненного max_dict
). Один из способов сделать это - добавить value
непосредственно перед возвращением, а не раньше:
money = [2, 1, 1, 2]
max_dict = {}
def helper(value, index):
if index in max_dict:
return value + max_dict[index]
elif index >= len(money):
return value
else:
option1 = money[index]
new_index1 = index + 2
option2 = 0
new_index2 = index + 1
max_dict[index] = max(helper(option1, new_index1), helper(option2, new_index2))
return value + max_dict[index]
helper(0, 0)
Более подробное объяснение того, что происходит, дается в ответе @ ggorlen
.SQL Server 2000 или выше.
SELECT *
FROM dbo.TblBusinessNames
WHERE BusinessName like '%[^A-z^0-9]Break%' -- In the middle of a sentence
OR BusinessName like 'Break%' -- At the beginning of a sentence
Ссылка ключевого слова для ПОДОБНОГО: http://msdn.microsoft.com/en-us/library/aa933232 (SQL.80) .aspx
where BusinessName like 'Break%' -- to find if it is beginning with the word
or BusinessName like '% Break%' -- to find if it contains the word anywhere but the beginning
Ваши ограничители слова будут многими: пространство, вкладка, начало строки, круглых скобок, периоды, запятые, восклицание/вопросительные знаки и т.д. Так, довольно простое решение состоит в том, чтобы использовать regex в Вашем операторе Where. (И это будет намного более эффективным, чем просто осуществление операции ИЛИ каждый возможный разделитель, о котором можно думать.)
Так как Вы упомянули LINQ, вот статья, которая описывает, как сделать эффективные запросы regex с SQL Server.
Сложные операторы Where как это всегда повышают красный флаг со мной, что касается производительности, таким образом, я определенно предлагаю сравнить независимо от того, что Вы заканчиваете с, можно решить создать поисковый индекс для столбца, в конце концов.
Править: Видел, что Вы отредактировали свой вопрос. При записи regex легко просто иметь его, используют любой non-alphanum символ в качестве разделителя, т.е. [^0-9a-zA-Z] или \W для любого несловесного символа, \b для любой границы слова и \B для любой границы неслова. Или, вместо того, чтобы соответствовать разделителям, просто распознайте любое слово, т.е. \w +. Вот другой пример кого-то делающего regex поиски с SQL Server (более сложный, чем, в чем Вы нуждались бы).
Вы упомянули LINQ - Вы могли сделать что-то как...
string myPattern = "% Break%";
var query =
from b in Business
where SqlMethods.Like(b.BusinessName, myPattern)
select b;
Обратите внимание, что это использует System.Linq.Data.SqlClient
пространство имен, которое переводит непосредственно в LIKE
оператор без дополнительной обработки.
Попробуйте следующее:
declare @vSearch nvarchar(100)
set @vSearch = 'About'
select * from btTab where ' ' + vText + ' ' LIKE '%[^A-z^0-9]' + @vSearch + '[^A-z^0-9]%'