Czy z jednego łańcucha można utworzyć drugi?

Odpowiedz Nowy wątek
2017-12-06 23:19
0

Hej, jestem początkujący w algorytmach... mam takie zadanie, do tej pory napisałem taki kod

class Sprawdzanie {

    public static boolean check(String s1, String s2){

        char[] x = s1.toCharArray();
        char[] y = s2.toCharArray();

        for (int i = 0; i < x.length; i++) {

            int count = 0;

            if (count >  2)
            {

                if (x[i] == y[i])
                {
                    continue;

                }
                else if (x[i] != y[i])
                {
                    count += 1;
                }
            }
            break;
        }

        return false;
    }

    public static void main(String[] args) {
        System.out.println(check("AABBCC", "ACBBCA"));

    }
}

Niestety mi nie działa, a algorytm wydaje mi się, że mam dobry, tutaj polecenie

Mając dany łańcuch można zamienić w nim dwa dowolne znaki miejscami,
na przykład łańcuch „AABBCC” można zamienić na „ACBBCA”, a ten z kolei na przykład na „BCBACA”.
Napisz program, który będzie posiadał funkcję:
bool changePossible(string s1, string s2)
która sprawdzi, czy możliwe jest uzyskanie łańcucha s2 z łańcucha białkowego s1, należy zadbać o
dobrą wydajność algorytmu.
Każdy z łańcuchów jest zapisany w osobnej linii i porównujemy
łańcuch z linii nieparzystej z łańcuchem z linii parzystej. Przykładowy plik:
ACBBCA
BCBACA
Można założyć, że liczba linii będzie zawsze parzysta.
łańcuchy:
BDDFPQPPRRAGGHPOPDKJKPEQAAER
BDDFPQPFRRAGGHPOPDKJKPEQAAER
BDDFPQPFRRAGCHPOPDKJKPEQAAER
BDDFPQPFRRAGGHPOPDKJKPEQAAER
AABBCC
ACBBCA
BCBACA
ACBBCA
AABBCC
BCBACA
BCBACA
AABBCCC
AABBCC
AABBCC
ABBBCC
AABCCC


As I have said so many times, God doesn't play dice with the world. - Albert Einstein

Pozostało 580 znaków

2017-12-06 23:44
0

Ten algorytm na pewno nie jest dobry. Popatrz:

for (int i = 0; i < x.length; i++) {
    int count = 0; // ustawiasz count na 0

    if (count >  2) // Sprawdzasz czy count > 2 - NIE
    {
    ...
    }
    break; // Uciekasz z pętli
}

Czyli pętla wykona się tylko raz i jedyne co zrobi to ustawi count na 0.

Nie mówiąc już o tym że jedyne co zwracasz z metody to false.

Pozostało 580 znaków

2017-12-07 13:08
0

Stwórz sobie tablice typu int posiadająca 26 indeksów, gdzie każda indeks będzie odpowiadał poszczególnej literze. Następnie przejdź znak po znaku oba łańcuchy i od każdej wartości znaku odejmij 65 ( Litera A w kodzie ASCII ma wartość 65) co da Ci indeks tablicy który musisz zwiększyć, na koniec wystarczy porównać obie tablice czy posiadają tyle samo odpowiednich liter (jako wartości int ich ilość).

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0