HashMap, odległość Levenshteina, problem ze znakami sąsiadującymi w jednym rzędzie na klawiaturze

0

hej,

próbuję zrobić zadanie z odległością Levenshteina, niestety nie potrafię rozwiązać problemu ze znakami sąsiadującymi w jednym rzędzie na klawiaturze.
W moim przypadku waga operacji insercji i delecji ma wynosić 1, natomiast waga substytucji wynosi:
-0.5, jeśli odnośna para znaków sąsiaduje w rzędzie na klawiaturze,

  • 1, w przeciwnym przypadku.

W rozwiązaniu mam zastosować tablicę asocjacyjną z małymi literami łacińskimi jako kluczami
oraz zbiorami liter z nimi sąsiadujących jako wartościami.

https://4programmers.net/Pastebin/8749

Bardzo proszę o pomoc, może jakieś naprowadzenie co robię źle

1

moze zamiast tego cuda z mapowaniem znakow do rzedow ktory nie ma prawa dzialac, po prostu zmapuj litere do jej sasiadow? tzn:

Map<Character, String> sasiady = new HashMap<Character, String>();
sasiady.put( 'q', "w");
sasiady.put( 'w', "qe");
// itd, popatrz na klawiature i przepisz :)

wywal te slowniki rzadx i zastap mapowaniem powyzej

0

Niestety to nie do końca pomogło.
wpisując np słowa "kot" i "kita" powinno pokazać wartość odległości równą 1,5; tymczasem pokazuje 2.

Czy błąd, którego nie mogę znaleźć nie znajduje się gdzieś w tej częsci kodu?

  else 
		           {
		        	  if(sasiady.get(s1.charAt(i-1)) == sasiady.get(s2.charAt(j-1)))
		        		  kosztZamiany = 0.5;
		        			        	  
		        	  else
		        		  kosztZamiany = 1;
		           }
0

sprawdzasz czy dwa rozne znaki maja tych samych sasiadow co nie ma sensu:
sasiady.get(s1.charAt(i-1)) == sasiady.get(s2.charAt(j-1))
mysle ze zamiast tego powinnas sprawdzic czy jeden jest sasiadem drugiego, tzn czy sasiedzi znaku z s1 zawieraja znak z s2, mozesz to zrobic np przy uzyciu string.indexOf(char)

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