鱼C论坛

 找回密码
 立即注册
查看: 5128|回复: 38

[技术交流] Python: 每日一题 34

[复制链接]
发表于 2017-4-26 22:12:33 | 显示全部楼层 |阅读模式

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

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

x
给你一个字符串组成列表strarr,给你一个整数k。[del]{啊,strarr-k}[/del]
你的任务是找出由k个字符组成的最长的连续的字符串组合。
例子:
longest_consec(["zone", "abigail", "theta", "form", "libe", "zas", "theta", "abigail"], 2) --> "abigailtheta"
n是列表的长度,如果if n = 0 or k > n or k <= 0 return ""。

  1. 请将以下代码存为test.py用于检验答案。
  2. def assert_equals(func, target, *args):
  3.     if func == target:
  4.         print('Success!')
  5.     else:
  6.         print('Fail!{0} not equals {1}'.format(func, target))
  7.         print(*args)
复制代码


  1. 测试:
  2. test.assert_equals(longest_consec(["zone", "abigail", "theta", "form", "libe", "zas"], 2), "abigailtheta")
  3. test.assert_equals(longest_consec(["ejjjjmmtthh", "zxxuueeg", "aanlljrrrxx", "dqqqaaabbb", "oocccffuucccjjjkkkjyyyeehh"], 1), "oocccffuucccjjjkkkjyyyeehh")
  4. test.assert_equals(longest_consec([], 3), "")
  5. test.assert_equals(longest_consec(["itvayloxrp","wkppqsztdkmvcuwvereiupccauycnjutlv","vweqilsfytihvrzlaodfixoyxvyuyvgpck"], 2), "wkppqsztdkmvcuwvereiupccauycnjutlvvweqilsfytihvrzlaodfixoyxvyuyvgpck")
  6. test.assert_equals(longest_consec(["wlwsasphmxx","owiaxujylentrklctozmymu","wpgozvxxiu"], 2), "wlwsasphmxxowiaxujylentrklctozmymu")
  7. test.assert_equals(longest_consec(["zone", "abigail", "theta", "form", "libe", "zas"], -2), "")
  8. test.assert_equals(longest_consec(["it","wkppv","ixoyx", "3452", "zzzzzzzzzzzz"], 3), "ixoyx3452zzzzzzzzzzzz")
  9. test.assert_equals(longest_consec(["it","wkppv","ixoyx", "3452", "zzzzzzzzzzzz"], 15), "")
  10. test.assert_equals(longest_consec(["it","wkppv","ixoyx", "3452", "zzzzzzzzzzzz"], 0), "")
复制代码



游客,如果您要查看本帖隐藏内容请回复

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-27 09:08:53 | 显示全部楼层
  1. def get_longest(list_,k):
  2.     list_.sort(cmp=None, key=lambda x:len(x), reverse=True)
  3.     if len(list_) == 0 or k > len(list_) or k <= 0 :
  4.         return ""
  5.     return ''.join(list_[0:k])
  6. list_= ["zone", "abigail", "theta", "form", "libe", "zas"]
  7. k=2
  8. print get_longest(list_,k)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-27 10:36:02 From FishC Mobile | 显示全部楼层
没懂k是什么意思……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-27 13:04:37 | 显示全部楼层
技术部-李宁 发表于 2017-4-27 10:36
没懂k是什么意思……

k就是最后的字符是由几个strarr里面的元素组成的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-27 13:39:04 From FishC Mobile | 显示全部楼层
def get_longest(lst,k):
  nlst = [len(i) for i in lst]
  xlst = [sum(nlst[i:i+k]) for i in range(len(lst)-k)]
  maxi = xlst.index(max(xlst))
  return ''.join(lst[maxi:maxi+k])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-28 20:58:58 | 显示全部楼层
  1. def lj(strarr,k):
  2.     b=sorted(strarr,key=lambda x:len(x),reverse=True)
  3.     n=len(b)
  4.     if n==0 or k>n or k<=0:
  5.         return ''
  6.     return ''.join(b[i] for i in range(k))

  7. a=["itvayloxrp","wkppqsztdkmvcuwvereiupccauycnjutlv","vweqilsfytihvrzlaodfixoyxvyuyvgpck"]
  8. print(lj(a,2))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-4-28 21:07:38 | 显示全部楼层

大佬刷题的速度超快啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-29 00:08:17 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-29 23:41:01 | 显示全部楼层
ooxx7788 发表于 2017-4-28 21:07
大佬刷题的速度超快啊!

前几天没时间,昨天恶补了一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-12 14:58:50 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-21 20:40:52 | 显示全部楼层
不知道我的理解对不对,题目没给出字符串一样长时怎么取,是我干了你随意吗
  1. # 排序出字符串长度,再按次数取出,有同样长度的字符串可能按Unicode码排列
  2. def longest_consec(a,k):
  3.     """传入字符串列表 a,要求字符数列 k,返回k个字符的最长组合"""
  4.     if len(a)==0 or k>len(a) or k<=0:
  5.         return ""
  6.     else:
  7.         s = sorted(a, key=lambda x: len(x), reverse=True)
  8.         return "".join([s[i] for i in range(k)])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-24 16:50:41 | 显示全部楼层

k就是列表strarr中k个元素组成的最长的字符串?但是连续怎么理解?题目没看懂。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-24 18:05:40 | 显示全部楼层
  1. def longest_consec(str_arr, k):
  2.     long_str = ''
  3.     if len(str_arr) == 0 or k <= 0 or k > len(str_arr):
  4.         return ''
  5.    
  6.     while k > 0:
  7.         tmp_str = str_arr[0]
  8.         
  9.         # Find the longest str in str_arr
  10.         for each in str_arr:
  11.             if len(each) > len(tmp_str):
  12.                 tmp_str = each
  13.         # Remove the same element in str_arr
  14.         for i in str_arr:
  15.             if i == tmp_str:
  16.                 str_arr.remove(i)

  17.         long_str = long_str + tmp_str
  18.         k = k - 1
  19.     print '******the answer is: *******', long_str
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-3 14:00:57 | 显示全部楼层
本帖最后由 shigure_takimi 于 2017-12-3 18:13 编辑
  1. def assert_equals(func, target, *args):
  2.     if func == target:
  3.         print('Success!')
  4.     else:
  5.         print('Fail!{0} not equals {1}'.format(func, target))
  6.         print(*args)

  7. def longest_consec(strarr, k):
  8.     if len(strarr)==0 or k>len(strarr) or k<=0:
  9.         return ''
  10.     else:
  11.         lengthOfEachStr = [len(each) for each in strarr]
  12.         maxLength = 0
  13.         start = 0
  14.         for i in range(len(strarr)):
  15.             length = sum(lengthOfEachStr[i:i+k])
  16.             if length > maxLength:
  17.                 maxLength = length
  18.                 start = i
  19.         return ''.join(strarr[start:start+k])


  20. assert_equals(longest_consec(["zone", "abigail", "theta", "form", "libe", "zas"], 2), "abigailtheta")
  21. assert_equals(longest_consec(["ejjjjmmtthh", "zxxuueeg", "aanlljrrrxx", "dqqqaaabbb", "oocccffuucccjjjkkkjyyyeehh"], 1), "oocccffuucccjjjkkkjyyyeehh")
  22. assert_equals(longest_consec([], 3), "")
  23. assert_equals(longest_consec(["itvayloxrp","wkppqsztdkmvcuwvereiupccauycnjutlv","vweqilsfytihvrzlaodfixoyxvyuyvgpck"], 2), "wkppqsztdkmvcuwvereiupccauycnjutlvvweqilsfytihvrzlaodfixoyxvyuyvgpck")
  24. assert_equals(longest_consec(["wlwsasphmxx","owiaxujylentrklctozmymu","wpgozvxxiu"], 2), "wlwsasphmxxowiaxujylentrklctozmymu")
  25. assert_equals(longest_consec(["zone", "abigail", "theta", "form", "libe", "zas"], -2), "")
  26. assert_equals(longest_consec(["it","wkppv","ixoyx", "3452", "zzzzzzzzzzzz"], 3), "ixoyx3452zzzzzzzzzzzz")
  27. assert_equals(longest_consec(["it","wkppv","ixoyx", "3452", "zzzzzzzzzzzz"], 15), "")
  28. assert_equals(longest_consec(["it","wkppv","ixoyx", "3452", "zzzzzzzzzzzz"], 0), "")
  29.         


  30. >>> ================================ RESTART ================================
  31. >>>
  32. Success!
  33. Success!
  34. Success!
  35. Success!
  36. Success!
  37. Success!
  38. Success!
  39. Success!
  40. Success!
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-5 12:12:22 | 显示全部楼层
发现一道题目做不来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-16 15:10:22 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-5-17 19:54:48 | 显示全部楼层
  1. def longest_consec(listr,n):
  2.     n_list = []
  3.     for i in range(len(listr)):
  4.         temp = [len(listr[i]),listr[i]]
  5.         n_list.append(temp)
  6.         temp = []
  7.     n_list.sort(reverse=True)
  8.     result = ('')
  9.     time = 0
  10.     while time != n :
  11.         result += str(n_list[time][1])
  12.         time += 1
  13.     print(result)
  14.         

  15. longest_consec(["zone", "abigail", "theta", "form", "libe", "zas", "theta", "abigail"], 2)  
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-17 20:48:16 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-5-26 22:33:03 | 显示全部楼层
本帖最后由 萧丹夜 于 2018-5-26 22:42 编辑

貌似已经出来了
  1. ## 代码
  2. import test

  3. def longest_consec(x,k):
  4.     result = ''
  5.     y = []
  6.     z = []
  7.     n = len(x)
  8.     if n == 0 or n < k or k <= 0:
  9.         return ""
  10.     else:
  11.         for i in range(n):
  12.             y.append(len(x[i]))
  13.         i = 0
  14.         while i < k:
  15.             sub = y.index(max(y))
  16.             if x[sub] not in z:
  17.                 # print(x[sub],end = '')
  18.                 result += x[sub]
  19.                 z.append(x[sub])
  20.                 y[sub] = 0
  21.                 i += 1
  22.             else:
  23.                 y[sub] = 0

  24.     return result

  25. #### 测试
  26. test.assert_equals(longest_consec(["zone", "abigail", "theta", "form", "libe", "zas"], 2), "abigailtheta")
  27. test.assert_equals(longest_consec(["ejjjjmmtthh", "zxxuueeg", "aanlljrrrxx", "dqqqaaabbb", "oocccffuucccjjjkkkjyyyeehh"], 1), "oocccffuucccjjjkkkjyyyeehh")
  28. test.assert_equals(longest_consec([], 3), "")
  29. test.assert_equals(longest_consec(["itvayloxrp","wkppqsztdkmvcuwvereiupccauycnjutlv","vweqilsfytihvrzlaodfixoyxvyuyvgpck"], 2), "wkppqsztdkmvcuwvereiupccauycnjutlvvweqilsfytihvrzlaodfixoyxvyuyvgpck")
  30. test.assert_equals(longest_consec(["wlwsasphmxx","owiaxujylentrklctozmymu","wpgozvxxiu"], 2), "wlwsasphmxxowiaxujylentrklctozmymu")
  31. test.assert_equals(longest_consec(["zone", "abigail", "theta", "form", "libe", "zas"], -2), "")
  32. test.assert_equals(longest_consec(["it","wkppv","ixoyx", "3452", "zzzzzzzzzzzz"], 3), "ixoyx3452zzzzzzzzzzzz")
  33. test.assert_equals(longest_consec(["it","wkppv","ixoyx", "3452", "zzzzzzzzzzzz"], 15), "")
  34. test.assert_equals(longest_consec(["it","wkppv","ixoyx", "3452", "zzzzzzzzzzzz"], 0), "")

  35. ## 结果
  36. Success!
  37. Success!
  38. Success!
  39. Success!
  40. Fail!owiaxujylentrklctozmymuwlwsasphmxx not equals wlwsasphmxxowiaxujylentrklctozmymu

  41. Success!
  42. Fail!zzzzzzzzzzzzwkppvixoyx not equals ixoyx3452zzzzzzzzzzzz

  43. Success!
  44. Success!
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 1

使用道具 举报

发表于 2018-7-18 14:42:15 | 显示全部楼层
看不懂题目,好闹心
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 01:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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