C ++ Найти повторяющиеся символы в отсортированной строке - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть проблема, которую я действительно не знаю, как решить.Мне нужно посчитать, сколько символов DISTINCT содержится в моей строке.

Например.

/

ВХОД: wjmzbmr

ВЫХОД: 6

/

Так как 'm' отображается дважды, он должен посчитать его один раз.

Моя основная мысль - отсортировать строку перед проверкой символов и затем подсчитать ДУБЛИКАТЫ.Когда я закончу подсчет количества дубликатов, я просто вычитаю длину строки с моим счетчиком дубликатов.

Вот код.

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string input;
    char temp;
    cin >> input;

    for(int i=0;i<input.length();i++)
    {
        for(int j=i;j<input.length();j++)
        {
            if(input[i] > input[j])
            {
                temp = input[i];
                input[i] = input[j];
                input[j] = temp;
            }
        }
    }
    //SORTED STRING PRINT HERE
    cout<<input<<endl;

    int counter=0;
    for(int i=0;i<input.length()-1;i++)
    {
        if(input[i]==input[++i])
        {
            counter++;
        }
    }
    int new_length = input.length() - counter;
    cout<<"DUPLICATES: "<<counter<<endl;
    cout<<"STRING LENGTH: "<<input.length()<<endl;
    cout<<"WITHOUT DUPLICATES: "<<new_length<<endl;

    return 0;
}

По некоторым причинам эта вещь не будет работатьна любой строке.Допустим, у меня есть такая строка:

/

INPUT: pppppp

ВЫХОД: 3

/

PS I 'Мы предоставили несколько выходов, чтобы проверить, в чем проблема.Я не мог найти это, поэтому я пишу здесь.Заранее спасибо, ребята.

1 Ответ

0 голосов
/ 19 сентября 2018

«Мне нужно посчитать, сколько символов DISTINCT содержится в моей строке»

Если, как вы упоминаете, ваша строка отсортирована, то это довольно тривиально.Используйте std :: unique в сочетании с erase, чтобы удалить все дубликаты.После этого ваша строка содержит только уникальные символы, поэтому ее .size() будет числом уникальных символов.

...