鱼C论坛

 找回密码
 立即注册
查看: 2343|回复: 6

求大佬帮忙解决一下这个问题或者给点思路

[复制链接]
发表于 2019-9-8 23:50:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
你得到一个字符串的数组strarr和一个整数k。 你的任务是返回第一个最长的字符串,该字符串由数组中的k个连续字符串组成。

def longest_consec(strarr, k): ...

example

longest_consec(["zone", "abigail", "theta", "form", "libe", "zas", "theta", "abigail"], 2) --> "abigailtheta"

n being the length of the string array, if n = 0 or k > n or k <= 0 return "".
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-9-9 00:12:51 | 显示全部楼层
本帖最后由 jackz007 于 2019-9-9 00:23 编辑
  1. def longest_consec(strarr , k):
  2.     n = len(strarr)
  3.     ret = ''
  4.     if n > 0 and k > 0 and k <= n:  
  5.         c , m , n = 0 , 0 , 0
  6.         for each in strarr:
  7.             if len(each) > m:
  8.                 n = c
  9.                 m = len(each)
  10.             c += 1
  11.         ret = ret . join((strarr[n + x] for x in range(k)))
  12.     return ret

  13. print(longest_consec(["zone", "abigail", "theta", "form", "libe", "zas", "theta", "abigail"] , 2))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-9 00:21:49 | 显示全部楼层
  1. def longest_consec(strarr, k):
  2.     if len(strarr) == 0 or k > len(strarr) or k <= 0:
  3.         return ""
  4.     else:
  5.         max_str = ''.join(strarr[:k])
  6.         for i in range(len(strarr)):
  7.             if len(''.join(strarr[i:i+k])) > len(max_str):
  8.                 max_str = ''.join(strarr[i:i+k])
  9.         return max_str
复制代码

这样写可以吗, 有什么地方可以改进
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-9 01:05:18 | 显示全部楼层

在测试longest_consec(["it","wkppv","ixoyx", "3452", "zzzzzzzzzzzz"], 3)的时候出现了IndexError的错误,
longest_consec(["wlwsasphmxx","owiaxujylentrklctozmymu","wpgozvxxiu"], 2)的答案不对,
还有可以解释一下c,m,n分别是什么意思吗?
谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-9 01:47:24 From FishC Mobile | 显示全部楼层
本帖最后由 jackz007 于 2019-9-9 02:05 编辑
ladiesmansy 发表于 2019-9-9 01:05
在测试longest_consec(["it","wkppv","ixoyx", "3452", "zzzzzzzzzzzz"], 3)的时候出现了IndexError的错 ...


      c 是枚举 strarr 元素的索引计数,m 是当前记录在案的最长字符串长度值,n 是这个字符串的位置索引值。
      看来这道题还是理解有误,需要找的应该是 k 个字符串拼接后最长的那一个。
  1. def longest_consec(strarr , k):
  2.     n = len(strarr)
  3.     ret = ''
  4.     if n > 0 and k > 0 and k <= n:  
  5.         m  = 0
  6.         for c in range(n - k):
  7.             s = ''. join(strarr[c : c + k])
  8.             if len(s) > m:
  9.                  ret , m = s , len(s)
  10.     return ret
  11. print(longest_consec(["zone", "abigail", "theta", "form", "libe", "zas", "theta", "abigail"] , 2))
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-9 01:55:16 | 显示全部楼层
jackz007 发表于 2019-9-9 01:47
c 是枚举 strarr 元素的索引计数,m 是当前记录在案的最长字符串长度值,n 是这个字符串的位置索 ...

好的,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-9 09:47:22 | 显示全部楼层
使用关键字参数对strarr进行排序:strarr.sort(key = len)

然后从后向前取出k个字符串,再拼接起来就行了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-19 06:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表