使用循环删除所有相邻的副本

2024-10-01 02:18:06 发布

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

我正在努力解决这个问题。我见过其他涉及列表和使用递归的解决方案,但我对学习如何使用循环来解决这个问题感兴趣,我似乎无法获得正确的输出。 (即无正则表达式、无元组、无字符串方法等)

input: caaabbbaacdddd
expected output:empty string

input:abbabd
expected output:bd

下面是我的代码我已经找到了其他方法来解决这个问题我只是在寻找最基本的解决办法。你知道吗

answer = input("enter a string: ")
new_answer = ""

#while answer != new_answer:
if answer == "": 
    print("goodBye!")
    #break

p = ""

for c in answer:
    if p != c:
        new_answer += p
        p = c
    else:
         p = c  

print(new_answer)

注释掉的部分是使整个程序循环通过以验证它们不再是重复的。你知道吗


Tags: 方法字符串answer列表newinputoutputstring
3条回答

我想用javascript来实现这一点(我知道它不是python,而是相同的逻辑):

let answer = 'acacbascsacasceoidfewfje';
for(i=0;i<answer.length;i++){
         if(obj[answer.substr(i,1)] === undefined){
              obj[answer.substr(i,1)] = 1
         }else{
              obj[answer.substr(i,1)]++;
         }
    }

    JSON.stringify(obj)

结果:

"{"a":4,"c":4,"b":1,"s":2,"e":2,"o":1,"i":1,"d":1,"f":1,"w":1,"j":1}"

试试这个!逻辑上唯一的问题是,你没有删除这个字符,这个字符一旦被添加到新的答案中,就会被重复。你知道吗

count = 0
for c in answer:
    if p != c:
        new_answer += p
        p = c
    else:
        new_answer = new_answer.replace(c,””,count)
        p = c  
    count += 1
print(new_answer)

在没有替换功能的情况下进一步简化:

count = 0
for c in answer:
    if p != c:
        new_answer += p
        p = c
    else:
        if count == 0:
             new_answer =“”
        else:
             new_answer=new_answer[:count-1]
             count -=1
        p = c  
     count += 1
print(new_answer)

最简单的基于循环的解决方案是:

result = ""
for i in answer:
    if result == "" or result[-1] != i:
        result += i 

您还可以使用^{},它完成您要查找的内容:

print("".join([i for i in map(lambda x: x[0], itertools.groupby(answer))])

相关问题 更多 >