在Python中按数字顺序查找最长字符串

2024-04-24 10:02:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有几千个数字的字符串。我需要遍历字符串,找到按数字顺序排列的最长字符集。例如:

string = '1223123341223455'

该字符串中以数字顺序排列的最长字符串为1223455,长度为7个字符。以下是我目前所拥有的一个例子:

^{pr2}$

它告诉我字符串索引超出了行的范围:

if string[a] <= string[b]

我的逻辑是:检查第一个数是否小于或等于第二个数。如果是,那两个数字是按数字顺序排列的。将第一个数字添加到空字符串中。一直这样做,直到遇到第一个数大于第二个数的点。到达这一点后,将所拥有的保存为字符串,并从上次停止的地方继续,但这次将累积的数字连接到另一个字符串。当你有两个数字串后,比较这两个串,取较高的一个。继续此操作,直到处理完字符串。我希望这有道理,有点难以解释。在


Tags: 字符串stringif地方数字逻辑例子字符集
3条回答

首先,确保您有几个东西要测试,以及预期的结果,包括边界情况。在

strings = {
    '1223123341223455': '1223455',  # at the end
    '1': '1',                       # just one
    '12321': '123',                 # at the start
    '212321': '123',                # in the middle
    '': '',                         # empty
    '123234': '123',                # two of same length, take the first
    '12231233412234552': '1223455', # at the end -1 testing the try 

}

然后搜索最长的字符串,而不将迄今为止找到的实际字符附加到某个临时字符串中。这是低效的。您只需知道最长字符串的起始索引及其长度:

^{pr2}$

现在在测试用例上运行这个并检查输出:

^{3}$

问题是您将a增加了太多次。因此,当a等于字符串的长度(a = 16)时,程序将中断。将第三行更改为while a < len(string):应该可以修复它。在

另外,我不太确定你在用变量做什么。你声明r1,它从来没有被使用过,你使用r2却没有声明它。这个问题可以比您的方法更容易解决—下面的代码似乎可以满足您的需要:

>>> r=longest=''
>>> for a in range(1:len(string)):
        if (string[a-1] <= string[a]) or len(r)==0:
            r += string[a]
        else:
        r = string[a]       // We need to reset r if the string is not in numerical order
        if len(r) > len(longest):
            longest = r
        a += 1
>>> longest
'1223455'

字符串的索引为0。因此,如果您尝试访问^{cd1>},您将得到^{cd2>}因为该字符串的最高索引是^{{cd3>}。将^{cd4>}条件更改为:^{cd5>}。此外,您不应该使用^{{cd6>}作为变量,因为它可能会掩盖python^{{cd6>}模块名称。

相关问题 更多 >