Niedawno przeprowadziłem wywiad z Google w sprawie stanowiska inżynierii oprogramowania i zadałem pytanie dotyczące budowania wzornika wzorów.Sprawdzanie, czy ciąg znaków spełnia określony wzorzec.
Więc trzeba zbudować funkcji
boolean isPattern(String givenPattern, String stringToMatch)
który wykonuje następujące czynności:
givenPattern
jest ciąg znaków, który zawiera:
a) 'a'-'z' chars
b) '*' chars which can be matched by 0 or more letters
c) '?' which just matches to a character - any letter basically
więc wywołanie może być coś podobnego
isPattern("abc", "abcd")
- zwraca wartość false, ponieważ OES nie pasuje do wzorca („d” jest extra)
isPattern("a*bc", "aksakwjahwhajahbcdbc")
, co jest prawdą, jak mamy „a” na początku, wiele znaków po czym kończy się „BC”
isPattern("a?bc", "adbc")
zwraca true ponieważ każdy znak wzoru pasuje do danego ciągu znaków.
Podczas rozmowy, czas jest krótki, pomyślałem, można przejść przez wzór, sprawdzić, czy znak jest literą, a * lub grupę? a następnie dopasuj odpowiednio znaki w danym ciągu. Ale to okazało się skomplikowanym zestawem pętli for-loop i nie udało nam się dojść do skutku w ciągu 45 minut.
Czy ktoś mógłby mi powiedzieć, jak szybko i skutecznie rozwiązać ten problem?
Wielkie dzięki!
Najłatwiej byłoby napisać metodę tłumaczenia tego wzoru składni wyrażeń regularnych Java: http://docs.oracle.com/javase/tutorial/essential/regex/ – hsan
Klasyczne pytanie dotyczące programowania dynamicznego. – Srinivas
OK. TO też było moje pytanie. Czy możesz używać wyrażenia regularnego? Jeśli tak, to powinno być względnie łatwe, jak przedstawiono w kodzie przez @assylias. – aa8y