这是一个用于在字符串中查找子字符串的经典窗口问题。有很多方法可以解决这个问题,其中一些方法比其他方法效率更高,但我将为您提供一个简单的方法,尽可能多地使用您的原始代码:
def search_redact(text)
str = ""
print "What is the word you would like to redact?"
redacted_name = gets.chomp
puts "Desired word to be REDACTED #{redacted_name}! "
redacted_name = "password"
redact = redacted_name.split("")
words = text.split("")
words.each.with_index do |letter, i|
if words[i..redact.length + i] == redact
words[i..redact.length + i].each.with_index do |_, j|
words[i + j] = "*"
end
end
end
words.join
end
search_redact("thisisapassword")
我们的想法是利用阵列
==
这让我们可以说
["a", "b", "c"] == ["a", "b", "c"]
.现在我们只需遍历输入,然后问这个子数组是否等于另一个子数组。如果它们确实匹配,我们知道需要更改值,因此我们循环遍历每个元素,并将其替换为
*
。