我正在尝试解决Hackerrank 的字符串函数计算问题。在这个问题中,我们给定一个字符串作为输入,并要求在输入字符串的所有子字符串中打印一个表示以下函数最大值的数字:
f(s, t) = 子字符串 's' 在字符串 't' 中出现的次数 * 子字符串 's' 的长度
我提交了以下内容作为答案:
import Data.List
main :: IO()
main = do
stringInput <- getLine
print $ solution stringInput
solution :: String -> Int
solution input = maximum $ map sum $ map (map length) $ group $ sort $ substrings input
substrings :: String -> [String]
substrings s = tail . inits =<< tails s
这个想法是:
获取
s
.let s = "aaaaaa"; substrings s = ["a","aa","aaa","aaaa","aaaaa","aaaaaa","a","aa","aaa","aaaa","aaaaa","a","aa","aaa","aaaa","a","aa","aaa","a","aa","a"]
解决。
["a","a","a","a","a","a","aa","aa","aa","aa","aa","aaa","aaa","aaa","aaa","aaaa" ,"aaaa","aaaa","aaaaa","aaaaa","aaaaaa"]
将其分组。
[["a","a","a","a","a","a"],["aa","aa","aa","aa","aa"],["aaa","aaa","aaa","aaa"],["aaaa","aaaa","aaaa"],["aaaaa","aaaaa"],["aaaaaa"]]
获取每个子字符串的单独长度。
[[1,1,1,1,1,1],[2,2,2,2,2],[3,3,3,3],[4,4,4],[5,5],[6]]
对结果列表求和。
[6,10,12,12,10,6]
.获得最大值。
12
.
这通过了初步测试。但是,当我提交它时,它会因“运行时错误”而失败所有其他测试。
测试用例编号 2、第一个失败,运行1.47秒,输入如下:
"aacbbabbabbbbbaaaaaaabbbbcacacbcabaccaabbbcaaabbccccbbbcbccccbbcaabaaabcbaacbcbaccaaaccbccbcaacbaccbaacbbabbabbbbbaaaaaaabbbbcacacbcabaccaabbbcaaabbccccbbbcbccccbbcaabaaabcbaacbcbaccaaaccbccbcaacbaccbaacbbabbabbbbbaaaaaaabbbbcacacbcabaccaabbbcaaabbccccbbbcbccccbbcaabaaabcbaacbcbaccaaaccbccbcaacbaccbaacbbabbabbbbbaaaaaaabbbbcacacbcabaccaabbbcaaabbccccbbbcbccccbbcaabaaabcbaacbcbaccaaaccbccbcaacbaccbaacbbabbabbbbbaaaaaaabbbbcacacbcabaccaabbbcaaabbccccbbbcbccccbbcaabaaabcbaacbcbaccaaaccbccbcaacbaccb"
你能帮我弄清楚我做错了什么,或者发生了什么吗?