使用循环删除所有相邻的重复项

时间:2018-06-29 04:50:21

标签: python python-3.x

我正在尝试解决这个问题。我已经看到了其他涉及列表和使用递归的解决方案,但是我对学习如何使用循环来解决这个问题很感兴趣,而且似乎无法获得正确的输出。 (即没有正则表达式,没有元组,没有字符串方法等)

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)

被注释掉的部分是使整个程序循环遍历,以确保不再重复。

5 个答案:

答案 0 :(得分:0)

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

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

您还可以使用itertools.groupby来满足您的需求:

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

答案 1 :(得分:0)

似乎您只是在比较当前字符和前一个字符。您可以使用in运算符:

if char in String 

所有26个字符

如果可以使用字典,则还可以为所有26个字符制作字典(因为您仅使用循环)

答案 2 :(得分:0)

试试看!在您的逻辑中,唯一的问题是您不会删除在new_answer中添加了重复字符。

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)

答案 3 :(得分:0)

我会用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}“

答案 4 :(得分:0)

    public class RemoveAdjacentDuplicates {

        public static void main(String[] args) {
            System.out.println(removeDuplicates("abbabd"));
        }

         public static String removeDuplicates(String S) {
             char[] stack = new char[S.length()];

             int i = 0;

             for(int j = 0 ; j < S.length() ; j++) {

                 char currentChar = S.charAt(j);
                 if(i > 0 && stack[i-1] == currentChar) {
                     i--;
                 }else {
                     stack[i] = currentChar;
                     i++;
                 }

             }
             return new String(stack , 0 , i);
         }

    }

该程序的结果是:

    input: caaabbbaacdddd
    output:empty string

    input:abbabd
    output:bd