黑客在python中排名交替的字符?

2024-04-23 10:15:26 发布

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

我一直在试图解决黑客排名alternating character problem,但我被卡住了。有谁能给这个问题一个解释或更好的方法吗。谢谢!在

print("Enter the number of test cases: ")
T = int(input())
line = T
while line > 0:
    test_string = input()
    i = 0
    counter = 0
    while i < (len(test_string)):        
        if (test_string[i - 1] == test_string[i] and len(test_string) > 2):
            test_string = test_string[i:]
            counter += 1                    
        elif (len(test_string) <= 2):
            break
        i += 1
    print (counter)        
    line -= 1

Tags: the方法testnumberinputstringlenline
3条回答

如果前一个字符与当前字符相同,我们只需要删除一个字符:

T = int(input()) # get how many test cases
for test in range(T): # loop in range T test cases 
    line = input() # get each test 
    prev, changes  = line[0], 0
    for ch in line[1:]:
        if prev == ch:
            changes += 1
        prev = ch            
 print (changes)

或使用sum and range获取所有分组:

^{pr2}$

Python版本:通过基本编码

这很简单:)

t = int(raw_input("enter Data \n"))
if t >= 1 and t <= 10 :
    data = []
    for x in xrange(t):
        data.append(raw_input())
    for x in xrange(t):
        if len(data[x])>=1 and len(data[x]) <= 10**5 :
            dcnt = 0
            val = data[x]
            d = len(val)
            for j in xrange(d - 1,0,-1):
                if val[j] == val[j-1]:
                    dcnt += 1
                    val = val[0:j] + val[j+1:10**5]
            print "%s ====> %s, %d deletions" % (data[x], val, dcnt)
        else:
            print "length of string is not withing range :: 1<= length of string <=10**5"
            continue
else:
    print "T is not withing range :: 1<= T <=10"

如果允许使用标准python libs,可以使用itertools.groupby进行尝试:

import itertools as it

def shashank(word):
    new_word = ''.join(char for char,_ in it.groupby(word))
    return new_word, len(word) - len(new_word)

shashank('ABCD') # returns ('ABCD', 0)
shashank('AAABBB') # returns ('AB', 4)

这是Linux命令的Python版本uniq。在

相关问题 更多 >