Advertisement
Guest User

Untitled

a guest
Jan 26th, 2020
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.01 KB | None | 0 0
  1. class Main {
  2.     static void main(String[] args) {
  3.        
  4.     }
  5.  
  6.     /*
  7.        * Użycie LinkedHashMap do znalezienia pierwszego niepowtarzającego się znaku w String
  8.        * Algorytm:
  9.        * 1) stwórz tablicę znaków i iteruj ją aby stworzyć mapę z znakami i ich ilościami
  10.        * 2) iteruj przez LinkedHashMap aby znalezć elementy z wartością 1 - jeśli znajdziesz, to jest rozwiązanie (LinkedHashMap pilnuje porządku wstawiania)
  11.     */
  12.  
  13.     public static char getFirstNonRepeatedChar1(String str) {
  14.         Map<Character, Integer> counts = new LinkedHashMap<>(str.length());
  15.  
  16.         for (char c : str.toCharArray()) {
  17.             counts.put(c, counts.containsKey(c) ? counts.get(c) + 1 : 1);
  18.         }
  19.  
  20.         for (Map.Entry<Character, Integer> entry : counts.entrySet()) {
  21.             if (entry.getValue() == 1) {
  22.                 return entry.getKey();
  23.             }
  24.         }
  25.  
  26.         throw new RuntimeException("String nie zawiera niepowtarzających się znaków.");
  27.     }
  28.  
  29.     /*
  30.        * Znajduje pierwszy niepowtarzalny znak w String'u w jednym podejściu.
  31.        * Używa dwóch struktur aby ściąć jedną iterację (deal: miejsce w pamięci vs czas).
  32.        * W momencie kiedy używamy struktur do zachowywania powtarzających i niepowtarzających
  33.        * się elementów to na koniec iteracji pierwszy element na liście jest naszym rozwiązaniem,
  34.      */
  35.  
  36.     public static char firstNonRepeatingChar2(String word) {
  37.         Set<Character> repeating = new HashSet<>();
  38.         List<Character> nonRepeating = new ArrayList<>();
  39.  
  40.         for (int i = 0; i < word.length(); i++) {
  41.             char letter = word.charAt(i);
  42.  
  43.             if (repeating.contains(letter)) {
  44.                 continue;
  45.             }
  46.  
  47.             if (nonRepeating.contains(letter)) {
  48.                 nonRepeating.remove((Character) letter); repeating.add(letter);
  49.             } else {
  50.                 nonRepeating.add(letter);
  51.             }
  52.         }
  53.  
  54.         return nonRepeating.get(0);
  55.     }
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement