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

时间:2015-10-23 03:17:51

标签: python loops count

我的代码:

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

但是我做了并且错误了一些它不合适的地方。 示例调用:

inversion('ABBFHDL')
    2

但我的回报为5。

2 个答案:

答案 0 :(得分:0)

根据您的评论,获取无序序列的总数并不像代码所示那么容易。以下是我实现目标的一种方法。

假设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

答案 1 :(得分:0)

假设一个序列是无序的'如果你按顺序遇到同一个角色或先于你的角色。

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