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

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

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.

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ść).

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