当前位置: 首页 > 面试题库 >

在Python中按顺序比较字符串中的字符

姚向晨
2023-03-14
问题内容

我试图弄清楚如何将字符串中的字符与字符串中的下一个字符进行比较。例如,如果我有一个字符串:

s = 'vzcbotdebobeggglakyl'

我希望能够将第一个字符与第二个字符进行比较,如果第二个字符大于或等于第一个字符(按字母顺序,a e,y =
y等),我想将1加到另一个变量(基本上是一个计数器)。如果不是,我想将计数器重置为0。基本上重复整个过程以获取字符串的长度。如果计数器变得大于maxlen变量,则将一个加到maxlen(或使maxlen
= sublen)。到目前为止,我的尝试是(而且我认为它是可行的):

s = 'vzcbotdebobeggglakyl'
sublen = 1
maxlen = 0
startnum = 0
for char in s:
    stopnum = startnum + 1
    if stopnum < len(s):
        charone = s[startnum]
        chartwo = s[stopnum]
        if charone <= chartwo:
            sublen += 1
            startnum += 1
            if sublen > maxlen:
                maxlen = sublen
        else:
            startnum +=1
            sublen = 1
    else:
        sublen = 0
print 'Longest substring is', maxlen, 'characters.'

现在,我还想做的是一行打印出该字符的子字符串。我已经为此工作了五个小时,无法解决问题。我尝试了很多不同的事情,现在我基本上比开始时感到更困惑。在上面的示例中,我想说

Longest substring is begggl, which is 6 characters.

问题答案:

这个怎么样:

def longest_ascending(s):
    matches = []
    current = [s[0]]
    for index, character in enumerate(s[1:]):
        if character >= s[index]:
            current.append(character)
        else:
            matches.append(current)
            current = [character]
    matches.append(current)
    return "".join(max(matches, key=len))

说明:

  • matches 是所有带有“升序”字符的子字符串的列表。
  • current是当我们遍历字符串时所构建的升序字符的子字符串。我们从字符串的第一个字符开始。
  • 现在,我们逐字符遍历剩余的字符串。enumerate()帮助我们跟踪 前一个 字符的索引(因为枚举始于0并且我们从第二个字符开始迭代该字符串)。
  • 如果当前字符“大于或等于”前一个字符,则将其添加到当前子字符串中并继续。
  • 如果不是,我们将当前子字符串添加到子字符串列表中,并使用当前字符播种下一个子字符串。
  • 迭代结束后,不要忘记将当前子字符串也添加到列表中。


 类似资料:
  • 问题内容: 我想按字母顺序比较上述两个字符串(在本例中为“ Project”,然后是“ Sunject”,因为“ P”在“ S”之前)。有谁知道如何用Java做到这一点? 问题答案: 可能需要或可能不需要。 如果需要本地化的字符串排序,请查看此链接。

  • 本文向大家介绍在Java中按字典顺序比较两个字符串,包括了在Java中按字典顺序比较两个字符串的使用技巧和注意事项,需要的朋友参考一下 String类的方法。此方法按字典顺序比较两个字符串。比较是基于字符串中每个字符的Unicode值。在字典上比较此String对象表示的字符序列与自变量字符串表示的字符序列。该方法返回 如果当前String对象在字典上在参数字符串之前,则为负整数。 如果当前Str

  • 本文向大家介绍在C#中按字典顺序比较两个字符串,包括了在C#中按字典顺序比较两个字符串的使用技巧和注意事项,需要的朋友参考一下 要比较C#中的字符串,请使用方法。它比较两个字符串并返回以下整数值- 在String.compare()方法中设置两个字符串并进行比较- 示例 您可以尝试运行以下代码以比较C#中的两个字符串。 输出结果

  • 问题内容: 我注意到我正在编写的Python脚本表现得很松散,并将其追溯到无限循环,其中循环条件为。在调试器中运行它,结果发现那条线实际上是。当我将其更改为!=’‘而不是时,它工作正常。 另外,即使比较或值,通常还是最好还是默认使用吗?我一直喜欢使用,因为我发现它在美学上更令人愉悦和pythonic(这就是我陷入这个陷阱的方式…),但是我想知道是否打算仅在你关心找到两个对象时才保留它?具有相同ID

  • 问题内容: 给我输出: 我不太了解第一行,为什么它会给我带来错误? 如果我在字符串2上添加空格,则此行为false,但如果不添加空格,则为true: 为什么第1行给我假,但第6行为真,但是如果我在string2上添加空格则为假。 谢谢=) 问题答案: 那里发生了几件事。 当您将两个字符串声明为相等的“ Hi”时,java将对其进行优化以引用相同的字符串对象(因此不必将相同的字符串存储两次)。 “

  • 问题内容: “按字典顺序比较两个字符串”是什么意思? 问题答案: 从@Bozho和@aioobe的答案出发,字典比较类似于在字典中可能会发现的顺序。 Java String类提供了该方法以便按字典顺序比较String。这样使用。 此方法的返回int值可以解释如下: 返回<0,则调用该方法的String按字典顺序排在首位(在字典中排在首位) 返回== 0,则这两个字符串在字典上等效 返回> 0,然后