鱼C论坛

 找回密码
 立即注册
查看: 6116|回复: 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 ""。
请将以下代码存为test.py用于检验答案。
def assert_equals(func, target, *args):
    if func == target:
        print('Success!')
    else:
        print('Fail!{0} not equals {1}'.format(func, target))
        print(*args)

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


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

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2017-4-27 09:08:53 | 显示全部楼层
def get_longest(list_,k):
    list_.sort(cmp=None, key=lambda x:len(x), reverse=True)
    if len(list_) == 0 or k > len(list_) or k <= 0 :
        return ""
    return ''.join(list_[0:k])
list_= ["zone", "abigail", "theta", "form", "libe", "zas"]
k=2
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 | 显示全部楼层
def lj(strarr,k):
    b=sorted(strarr,key=lambda x:len(x),reverse=True)
    n=len(b)
    if n==0 or k>n or k<=0:
        return ''
    return ''.join(b[i] for i in range(k))

a=["itvayloxrp","wkppqsztdkmvcuwvereiupccauycnjutlv","vweqilsfytihvrzlaodfixoyxvyuyvgpck"]
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 | 显示全部楼层
不知道我的理解对不对,题目没给出字符串一样长时怎么取,是我干了你随意吗
# 排序出字符串长度,再按次数取出,有同样长度的字符串可能按Unicode码排列
def longest_consec(a,k):
    """传入字符串列表 a,要求字符数列 k,返回k个字符的最长组合"""
    if len(a)==0 or k>len(a) or k<=0:
        return ""
    else:
        s = sorted(a, key=lambda x: len(x), reverse=True)
        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 | 显示全部楼层
def longest_consec(str_arr, k):
    long_str = ''
    if len(str_arr) == 0 or k <= 0 or k > len(str_arr):
        return ''
    
    while k > 0:
        tmp_str = str_arr[0]
        
        # Find the longest str in str_arr
        for each in str_arr:
            if len(each) > len(tmp_str):
                tmp_str = each
        # Remove the same element in str_arr
        for i in str_arr:
            if i == tmp_str:
                str_arr.remove(i)

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

使用道具 举报

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

def longest_consec(strarr, k):
    if len(strarr)==0 or k>len(strarr) or k<=0:
        return ''
    else:
        lengthOfEachStr = [len(each) for each in strarr]
        maxLength = 0
        start = 0
        for i in range(len(strarr)):
            length = sum(lengthOfEachStr[i:i+k])
            if length > maxLength:
                maxLength = length
                start = i
        return ''.join(strarr[start:start+k])


assert_equals(longest_consec(["zone", "abigail", "theta", "form", "libe", "zas"], 2), "abigailtheta")
assert_equals(longest_consec(["ejjjjmmtthh", "zxxuueeg", "aanlljrrrxx", "dqqqaaabbb", "oocccffuucccjjjkkkjyyyeehh"], 1), "oocccffuucccjjjkkkjyyyeehh")
assert_equals(longest_consec([], 3), "")
assert_equals(longest_consec(["itvayloxrp","wkppqsztdkmvcuwvereiupccauycnjutlv","vweqilsfytihvrzlaodfixoyxvyuyvgpck"], 2), "wkppqsztdkmvcuwvereiupccauycnjutlvvweqilsfytihvrzlaodfixoyxvyuyvgpck")
assert_equals(longest_consec(["wlwsasphmxx","owiaxujylentrklctozmymu","wpgozvxxiu"], 2), "wlwsasphmxxowiaxujylentrklctozmymu")
assert_equals(longest_consec(["zone", "abigail", "theta", "form", "libe", "zas"], -2), "")
assert_equals(longest_consec(["it","wkppv","ixoyx", "3452", "zzzzzzzzzzzz"], 3), "ixoyx3452zzzzzzzzzzzz")
assert_equals(longest_consec(["it","wkppv","ixoyx", "3452", "zzzzzzzzzzzz"], 15), "")
assert_equals(longest_consec(["it","wkppv","ixoyx", "3452", "zzzzzzzzzzzz"], 0), "")
        


>>> ================================ RESTART ================================
>>> 
Success!
Success!
Success!
Success!
Success!
Success!
Success!
Success!
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 | 显示全部楼层
def longest_consec(listr,n):
    n_list = []
    for i in range(len(listr)):
        temp = [len(listr[i]),listr[i]]
        n_list.append(temp)
        temp = []
    n_list.sort(reverse=True)
    result = ('')
    time = 0
    while time != n :
        result += str(n_list[time][1])
        time += 1
    print(result)
        

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 编辑

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

def longest_consec(x,k):
    result = ''
    y = []
    z = []
    n = len(x)
    if n == 0 or n < k or k <= 0:
        return ""
    else:
        for i in range(n):
            y.append(len(x[i]))
        i = 0
        while i < k:
            sub = y.index(max(y))
            if x[sub] not in z:
                # print(x[sub],end = '')
                result += x[sub]
                z.append(x[sub])
                y[sub] = 0
                i += 1
            else:
                y[sub] = 0

    return result

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

## 结果
Success!
Success!
Success!
Success!
Fail!owiaxujylentrklctozmymuwlwsasphmxx not equals wlwsasphmxxowiaxujylentrklctozmymu

Success!
Fail!zzzzzzzzzzzzwkppvixoyx not equals ixoyx3452zzzzzzzzzzzz

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 08:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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