나의 모양

[DailyCoding] 16 | isIsogram 본문

SEB/Daily Coding

[DailyCoding] 16 | isIsogram

kexon 2022. 8. 11. 18:19

✏️ Description

문자열을 입력받아 아이소그램인지 여부를 리턴

  • 입력: String
  • 출력: boolean
  • 입출력 예시
    boolean output = isIsogram("aba");  // false
    output = isIsogram("Dermatoglyphics");  // true
    output = isIsogram("moOse");  // false

📝 Flow

- 입력받은 문자열을 하나씩 잘라서 => split()
- 문자열 배열에 담아서 순회 => forEach
- 같은 문자가 있는지 앞뒤로 읽어오면서 비교 => indexOf, lastIndexOf
- 문자 비교해서 같은게 있으면 false 리턴

🤯 Trouble

  • 대소문자는 구별하지 않는다고 해서 a == A 로 생각했다. ⇒ 값이 안나옴
    • a ≠ A

📚 TIL

  • indexOf(”찾을 특정 문자”, “시작할 위치”)
    • 시작할 위치는 생략이 가능하고, 생략할 경우 0번째 인덱스부터 찾음
    • 찾는 글자가 없으면 -1 리턴
  • lastIndexOf(”찾을 특정 문자”, “시작할 위치”) ⇒ 오른쪽에서부터 찾음
    • 찾는 글자가 없으면 -1 리턴
    • 주의점
      • 뒤에서부터 인덱스 위치를 세주는게 아니라 앞에서(왼쪽 → 오른쪽)부터 위치한 인덱스를 반환
  • 지정된 문자열에서 indexOf()와 lastIndexOf() 메서드가 동일한 값을 반환하는 경우, 문자열에 반복되는 문자가 없는 것

👩🏻‍💻 Implementation

if(str.equals("")) return true;

str = str.toLowerCase();
String[] word = str.split("");

for(String strArr : word) {
    if(str.indexOf(strArr) != str.lastIndexOf(strArr)) {
        return false;
    }
}

return true;

💬 Thought

  • reference에서는 HashMap을 사용했다. 전혀 생각하지 못했는데 레퍼런스 잘 보고 다음에 다시 풀어봐야겠다.
Comments