鱼C论坛

 找回密码
 立即注册
查看: 3640|回复: 33

[技术交流] 鱼C论坛Python精英挑战赛(第四季热身)

[复制链接]
发表于 2017-11-21 09:06:17 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 jerryxjr1220 于 2017-11-24 08:45 编辑

第四届鱼C论坛精英挑战赛即将回归咯!为了增加趣味性,本届仍然延续“新玩法”-- “押宝玩法”,“竞猜玩法”和“擂主玩法”。

同时,根据以往鱼油的反馈,精英赛题目普遍偏难,所以参与的鱼油相对较少。为了提高大家的参与度,本届挑战赛会大幅降低难度,使大部分鱼油都能参赛。同时,会增设一、二、三名奖励,第一名奖励50鱼币,第二名30鱼币,第三名20鱼币。

新玩法规则:

1. 押宝玩法:进入“押宝”竞猜帖,购买主题(5鱼币)参与“押宝”,最终“押宝”获胜者将平分奖池的奖金并额外获取10鱼币奖励。猜错者将不返还“押宝”的鱼币。若本届比赛无人“押宝”成功,奖金将累计到下次比赛。

2. 竞猜玩法:直接在比赛帖的下方进行投票,凡事“竞赛”获胜者,将奖励5鱼币。竞猜无门槛,人人都可以参与。竞猜以后,请在本帖留个言,方便领取奖励。

3. 擂主玩法:上一期挑战成功的鱼油成为挑战赛的擂主,擂主有优先权提议下一期的赛题,一届挑战赛共分5期,同一届中当擂主最长的鱼油有额外奖励。

热身赛题目: 最长连续不重复子字符串

给定一组字符串,求其中最长连续不重复子字符串的长度。
例如:
给 "abcabcbb", 答案是 "abc", 长度是 3.

给 "bbbbb", 答案是 "b", 长度是 1.

给 "pwwkew", 答案是 "wke", 长度是 3. 注意结果必须是子字符串, "pwke" 不是连续的子字符串.

  1. def longest_substring(string):
  2.     '''your code here'''
  3.     return result
复制代码


评选规则:结果正确、效率高、代码简洁。

热身赛截止日期:11月24日0时

热身赛的获胜者讲作为第一期的擂主参赛,热身赛获胜者1名,奖励10鱼币。

@小甲鱼 @冬雪雪冬 @~风介~ @SixPy

评分

参与人数 2荣誉 +9 鱼币 +9 贡献 +6 收起 理由
JAY饭 + 3 + 3
小甲鱼的二师兄 + 6 + 6 + 6 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2017-11-21 15:24:42 | 显示全部楼层
本帖最后由 SixPy 于 2017-11-21 17:11 编辑
  1. def longest_substring(s):
  2.     chrs,ss,maxss = set(),[],''
  3.     for c in s:
  4.         if c in chrs:
  5.             if len(ss)>len(maxss):
  6.                 maxss = ''.join(ss)               
  7.             ss = ss[ss.index(c)+1:]
  8.             chrs = set(ss)            
  9.         chrs.add(c)
  10.         ss.append(c)
  11.     if len(ss)>len(maxss):
  12.         maxss = ''.join(ss)               
  13.     return maxss
  14.         
  15. ls = ["abcabcbbabcdefg","abcabcbb","bbbbb","pwwkew"]
  16. for s in ls:   
  17.     print(s,longest_substring(s))
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +2 收起 理由
jerryxjr1220 + 2 + 2 + 2 你应该能写得更简洁才对^_^

查看全部评分

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

使用道具 举报

发表于 2017-11-21 15:42:51 | 显示全部楼层
  1. def longest_substring(st):
  2.     longest_sub = ''
  3.     for i in range(len(st)):
  4.         sub_str = ''
  5.         for each in st[i:]:
  6.             if each not in sub_str:
  7.                 sub_str += each
  8.                 if len(sub_str) > len(longest_sub):
  9.                     longest_sub = sub_str
  10.             else:
  11.                 sub_str = each
  12.     return longest_sub, len(longest_sub)
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +2 收起 理由
jerryxjr1220 + 2 + 2 + 2 答题奖励!

查看全部评分

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

使用道具 举报

发表于 2017-11-22 07:15:28 | 显示全部楼层
版主你好:
        下面的代码勉强能满足题目要求,虽然只有几行代码,但是却足足花了5个小时的时间,
中间不停的修修改改才勉强能达到要求。为了能达到学习的目的,我尽量用我自己掌握的知识来写代码。
        但是由于自学的编程,所以代码看起来很是“野路子”,所以恳请版主能帮我修改一下代码,
能以更专业的角度来让代码正规些,以便能让我学习一些思路或者技巧。
        谢谢!

  1. s = 'abccde'
  2. pool = []
  3. '''
  4. 对字符串从0位开始迭代 string[n]只要不在string[0:n]里就继续,
  5. 否则提取string[0:n]并截取string[n:]带入func()继续迭代
  6. '''
  7. def func(string):
  8.     n = 0
  9.     while n < len(string):
  10.         if string[n] in string[0:n]:
  11.             pool.append(string[0:n])
  12.             return func(string[n:])
  13.         n += 1
  14.         if n == len(string):
  15.             return pool.append(string[0:n])

  16. func(s)

  17. L = sorted(pool, key=len, reverse=True) #按字符串长度进行排序
  18. print(L)
  19. L = [x for x in L if len(x) == len(L[0])] #最长长度有多个的情况下选出全部
  20. print(L)
复制代码

点评

我很赞同!: 3.0
我很赞同!: 3
思路上看应该是对的,不过可以写得优雅一点,我最终会公布我的解答,一行代码可以实现你的整个程序,嵌套递归,到时候留意解答吧^_^  发表于 2017-11-22 09:08

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +2 收起 理由
jerryxjr1220 + 2 + 2 + 2 答题奖励!

查看全部评分

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

使用道具 举报

发表于 2017-11-22 10:20:31 | 显示全部楼层
写得更简洁

@jerryxjr1220
一般来说,效率和简洁是相互矛盾的,要高效,就要写些脏代码,把各种不同的情形都分开处理,这样,就没啥简洁可言了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-22 11:05:53 | 显示全部楼层
SixPy 发表于 2017-11-22 10:20
@jerryxjr1220
一般来说,效率和简洁是相互矛盾的,要高效,就要写些脏代码,把各种不同的情形都分开处 ...

那你觉得热身赛的题目难度怎么样?是不是还要再降低一点难度?感觉参与的人还是不够多...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-22 11:26:15 | 显示全部楼层
jerryxjr1220 发表于 2017-11-22 11:05
那你觉得热身赛的题目难度怎么样?是不是还要再降低一点难度?感觉参与的人还是不够多...

可以了,简单的和复杂的算法都能实现,
人不多是因为关注度不够
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-22 16:01:03 | 显示全部楼层
新手  请多指教
def longest_substring(string):
    s=[]
    for each in string:
        if each in s:
            break
        s.append(each)
        
    result = len(s)
    return result

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
jerryxjr1220 + 1 + 1 答题奖励,不过这个结果不对吧

查看全部评分

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

使用道具 举报

发表于 2017-11-23 10:32:23 | 显示全部楼层
66
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-23 10:53:43 | 显示全部楼层
kankan怎么玩的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-23 11:08:25 | 显示全部楼层
  1. def string(a):
  2.     list1 = []
  3.     list2 = []
  4.     list3 = []
  5.     dict1 = dict()
  6.     for i in a:
  7.         if i not in list1:
  8.             list1.append(i)
  9.         else:
  10.             list2.append(list1)
  11.             list1 =[]
  12.             list1.append(i)
  13.     list2.append(list1)
  14.     m = 0
  15.     for n in list2:
  16.         length = len(n)
  17.         
  18.         list3.append(length)
  19.     max1 = max(list3)

  20.     for n1 in list2:
  21.         if len(n1) == max1:
  22.             print(n1, max1)
  23.    
  24.         
  25. a = input('请输入字符串:')
  26. string(a)
  27.          
  28.          
  29.    
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +2 收起 理由
jerryxjr1220 + 2 + 2 + 2 答题奖励,思路对的,但不用那么麻烦

查看全部评分

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

使用道具 举报

发表于 2017-11-23 11:11:59 | 显示全部楼层
我的思路是,将字符串迭代加入列表,一旦出现重复,先将原列表加入大列表,然后重新建立列表储存新的字符,如此循环,最后比较大列表中各小列表长度,打印出最长的列表,也就是最长的子字符串,再打印出长度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-23 11:14:08 | 显示全部楼层
我是个才学到35课的萌新,求后面的题目不要太超前
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-23 12:58:53 | 显示全部楼层
  1. def longest_substring(string):
  2.     temporary, result = "", ""
  3.     for char in string:
  4.         if char not in temporary:
  5.             temporary += char
  6.         else:
  7.             if len(result) < len(temporary):
  8.                 result = temporary
  9.             temporary = ""
  10.     return result
复制代码

点评

不,我坚决不同意楼主的看法!: 1.0
不,我坚决不同意楼主的看法!: 1
测试“pwwkew”,结果不正确  发表于 2017-11-24 08:25

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +2 收起 理由
jerryxjr1220 + 2 + 2 + 2 答题奖励!

查看全部评分

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

使用道具 举报

发表于 2017-11-23 13:12:37 | 显示全部楼层
def longest_substring(string):
        length = len(string)
        for i in range(1,length+1):
                for n in range(length-i):
                        char = list(string[n:n+i])
                        if len(char) == len(set(char)):
                                result = i
                                break
        return result

点评

我很赞同!: 5.0
我很赞同!: 5
恭喜获胜,请去评选结果帖回帖领奖!  发表于 2017-11-24 09:07

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +2 收起 理由
jerryxjr1220 + 2 + 2 + 2 答题奖励!

查看全部评分

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

使用道具 举报

发表于 2017-11-23 14:26:19 | 显示全部楼层
# -*- coding: utf-8 -*-
# bulid by Bean_Wei

def longest_substring(string):
    length=len(string)
    list=[]
    for i in  range(length):
        tmp=string[i]
        for j in range(i+1,length):
            if string[j] not in tmp:
                tmp+=string[j]
            else:
                break
        list.append(tmp)
    list.sort(lambda x,y:cmp(len(x),len(y)))
    result=list[-1]

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +2 收起 理由
jerryxjr1220 + 2 + 2 + 2 答题奖励

查看全部评分

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

使用道具 举报

发表于 2017-11-23 15:26:45 | 显示全部楼层
我写的东西总是乱七八糟,求一个范本

点评

我很赞同!: 3.0
我很赞同!: 3
留意评选结果吧,我到时候会公布我的参考解答。  发表于 2017-11-23 16:54
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-23 20:32:08 | 显示全部楼层
def longest_substring(string):
        result=''
        long=[]
        i=0
        while(i<len(string)):
                if string[i] in result:
                        if len(string)-i >len(result):
                                long.append(result)
                                result=''
                                result+=str(string[i])
                        else:
                                break
                else:
                        result+=str(string[i])
                i+=1
        long.append(result)
        long.sort(reverse=True)
        result=long[0]
        return result

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +2 收起 理由
jerryxjr1220 + 2 + 2 + 2 答题奖励

查看全部评分

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

使用道具 举报

发表于 2017-11-23 20:38:09 | 显示全部楼层
没找到“押宝”竞猜帖在哪就贴这了,很郁闷为啥不在题目后面给个链接

点评

我很赞同!: 1.0
我很赞同!: 1
热身赛没有押宝帖,正式活动才开始有。  发表于 2017-11-23 21:17
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-23 20:47:36 | 显示全部楼层
def longest_substring(string):
        result=''
        long=[]
        i=0
        while(i<len(string)):
                if string[i] in result:
                        if len(string)-i >len(result):
                                long.append(result)
                                result=''
                                result+=str(string[i])
                        else:
                                break
                else:
                        result+=str(string[i])
                i+=1
        long.append(result)
        long.sort(reverse=True)
        result=long[0]
        print("答案是:"+result+','+'长度是'+str(len(result)))
        return result

忘了print,补一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-19 11:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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