【问题标题】:Write code that prints the longest substring of a string where letters are in alphabetical order [duplicate]编写代码打印字符串的最长子字符串,其中字母按字母顺序排列[重复]
【发布时间】:2015-06-22 05:46:58
【问题描述】:

我正在尝试编写如标题所述的代码。如果两个子字符串大小相同,只需打印第一个字符串

例如:

s = 'abcbcd'

会打印出来

'abc'

这是我目前所拥有的:

old_order = ''
re = ''

for r in range(len(s)):
    order = ''
    for letter in s[r:]:
        try:
            if letter <= s[s.index(letter)+1]:
                order += letter 
        except:
            order += letter
        else:
            order += letter
            print(order)
            if r is 0:
                old_order = order
            if len(order) > len(old_order):
                re = order

            else:
                re = old_order
print(re)

我得到了什么:

aabbcbbc

【问题讨论】:

标签: python


【解决方案1】:

代码:

def longest_sub_str(A):
    final_res = ""
    tmp = ""
    prev = ""
    for i in A:
        if prev < i:
            prev = i
            tmp += i
        else:
            prev = ""
            if len(tmp)>len(final_res):
                final_res = tmp
            tmp = ""
    return tmp if len(tmp)>len(final_res) else final_res


print longest_sub_str('abcdddabcddefbcd')

输出:

abcd

【讨论】:

    【解决方案2】:
    def isInAlphabeticalOrder(word):
        preString=''
        alphaString=''
        for char in word:
            if(alphaString==''):
                alphaString=char
            elif(alphaString[-1]<=char):
                alphaString+=char
            elif(alphaString[-1]>char):
               if(len(preString)<len(alphaString)):
                   preString=alphaString
                   alphaString=char
               else:
                   alphaString=char
        if(len(alphaString)>len(preString)):
            preString=alphaString
        print(preString)
    

    编辑:详细说明您的代码未产生正确结果的原因 - 无论 try 语句中的结果如何,您都将 order 附加到字母中。因此,如果 try 语句返回 true,则字母被附加两次,否则,字母仍然被附加。 编辑:固定代码

    【讨论】:

    • 这不会产生最长的子串,而是第一个子串
    • 谢谢,我显然没有正确阅读问题。会解决这个问题
    【解决方案3】:

    试试这个 (finding the longest substring of letters in alphabetical order in a given string):

    s = 'abcbcd'
    r = []
    substring = []
    for length in s:
        r = r + [length]        
        if r == sorted(r) and len(r) >= len(substring):
            substring=r
        elif r != sorted(r):
            r = [r[len(r)-1]]        
    
    print(substring)
    

    在我附加的链接中查看 timgeb 的答案以获得完整答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多