我正在尝试进行此测试,并且在线有很多解决方案,但我首先要弄清楚为什么我的解决方案是错误的,即使它在我输入某些字符串时似乎正确的结果:
以下是他们的要求:
编写一个接受字符串的方法。返回中最长的单词 串。您可以假设该字符串仅包含字母和 空格。
您可以使用字符串
split
方法来帮助您完成任务。
这是我的解决方案,我认为我可以将字符串转换为数组,从最大长度降序排序,然后只需打印新字符串中的第一个元素:
def longest_word(sentence)
sentence = sentence.split
sentence.sort_by! { |longest| -longest.length }
return sentence[0]
end
这显然不起作用,因为他们的测试给了我所有的错误。测试有:
puts("\nTests for #longest_word")
puts("===============================================")
puts(
'longest_word("short longest") == "longest": ' +
(longest_word('short longest') == 'longest').to_s
)
puts(
'longest_word("one") == "one": ' +
(longest_word('one') == 'one').to_s
)
puts(
'longest_word("abc def abcde") == "abcde": ' +
(longest_word('abc def abcde') == 'abcde').to_s
)
puts("===============================================")
所以问题是为什么?我可以修改我的代码或者这个想法都是错的,我需要完全不同吗?
答案 0 :(得分:1)
str = "Which word in this string is longest?"
r = /[[:alpha:]]+/
str.scan(r).max_by(&:length)
#=> "longest"
这个正则表达式读取"匹配一个或多个字符"。外括号构成字符类,意味着括号内的一个字符必须匹配。
要处理带连字符或包含单引号的单词,以下是不完美的修改 1 :
str = "Who said that chicken is finger-licken' good?"
r = /[[[:alpha:]]'-]+/
str.scan(r).max_by(&:length)
#=> "finger-licken'"
这个正则表达式读取"匹配一个或多个字母,撇号或连字符"。外括号构成字符类,意味着括号内的一个字符必须匹配。
1我已成功使用" finger-licken'"在拼字游戏中。
答案 1 :(得分:-1)
我写的是:
str = "Write a method that takes in a string"
str.split.sort_by(&:length).last # => "string"