在Python中返回字符串s中无序序列(ABC顺序)的总量

2024-09-28 16:23:48 发布

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

我的代码:

def inversions(s):
    last = ''
    count = 0
    for letter in s:
        if letter > last:
           count += 1
           last = letter
    return count

但我犯了一些错误,在那里它不正确计算。 呼叫示例:

inversion('ABBFHDL')
    2

但我的是5


Tags: 代码in示例forreturnifdefcount
2条回答

根据您的注释,要获得无序序列的总数并不像代码显示的那么容易。下面是我实现目标的一种方法

假设s中的字母都是大写的。我用字典来存储访问过的信件的编号。通过从字母到Z的迭代,找出目前为止有多少无序的字母

def inversions(s):
    nums = dict()
    count = 0
    for ch in s:
        for i in range(ord(ch) + 1,ord('Z')+1):
            count += nums.get(i,0)
        if nums.has_key(ord(ch)):
            nums[ord(ch)] += 1
        else:
            nums[ord(ch)] = 1
    return count

假设一个序列是“无序”的,如果你遇到同一个字符或者一个在你前面的字符

def solution(str):
    count = 0
    for i in range(len(str)-1):
        if str[i] >= str[i+1]:
            count += 1
    return count

给你:

Python 2.7.3 (v2.7.3:70274d53c1dd, Apr  9 2012, 20:52:43) 
 >>>solution('ABBFHDL')
 >>>2

相关问题 更多 >