是否可以在不定义功能的情况下实现这一目标?

时间:2018-03-29 18:43:22

标签: python python-3.x

我正在尝试编写一个Python程序,该程序将获取一个字符串并打印其中最长的子字符串,这也是按字母顺序排列的。例如:

the_string =" abcdefgghhisdghlqjwnmonty" 这里字母顺序最长的子串将是" abcdefgghhis"

我不允许定义自己的功能,也不能使用列表。所以这就是我想出的:

def in_alphabetical_order(string):
    for letter in range(len(string) - 1):
        if string[letter] > string[letter + 1]:
            return False
    return True    

s = "somestring"
count = 0

for char in range(len(s)):
    i = 0
    while i <= len(s):
        sub_string = s[char : i]
        if (len(sub_string) > count) and (in_alphabetical_order(sub_string)):
            count = len(sub_string)
            longest_string = sub_string
        i += 1

print("Longest substring in alphabetical order is: " + longest_string)

这显然包含一个非内置函数。如何在不定义此函数的情况下检查子候选字符串的元素是否按字母顺序排列?换句话说:我如何实现这个函数为我做的代码(例如在代码中使用另一个for循环或其他东西)?

3 个答案:

答案 0 :(得分:1)

您无需使用函数调用检查整个子字符串,以查看它是否按字母顺序排列。你可以一次检查一个角色。

从第一个角色开始。如果下一个字符在字母表后面,请继续在字符串中移动。当你到达字母表中比前一个字符更早的字符时,你已经找到了从第一个字符开始的最长的增长子字符串。保存并从第二个角色重新开始。

每次从字符N开始找到最长的子字符串时,请检查它是否比前一个最长的子字符串长。如果是,请更换旧的。

答案 1 :(得分:1)

只需通过代码,您就可以将函数的操作移动到循环中,并使用变量来存储返回值。

我建议听听蜥蜴收费,以帮助您解决问题

s = "somestring"
count = 0
longest_string = ''


for char in range(len(s)):
    i = 0
    while i <= len(s):
        sub_string = s[char : i]
        in_order = True

        for letter in range(len(sub_string) - 1):
            if sub_string[letter] > sub_string[letter + 1]:
                in_order = False
                break

        if (len(sub_string) > count) and (in_order):
            count = len(sub_string)
            longest_string = sub_string
        i += 1

print("Longest substring in alphabetical order is: " + longest_string)

答案 2 :(得分:0)

这是一个基于你所拥有的解决方案:

s = 'abcdefgghhisdghlqjwnmonty'

m, n = '', ''

for i in range(len(s) - 1):
    if s[i + 1] < s[i]:
        if len(n) > len(m):
            m = n
        n = s[i]
    else:
        n += s[i]

输出:

m

'abcdefgghhi'