프로그래밍/Algorithm

문자열 두개를 받아 그 중 하나가 다른 하나의 순열인지 판단하라(2)

모지사바하 2015. 7. 29. 18:12
/**
* Created by kwo2002 on 2015-07-29.
* 문자열 두개를 받아 그 중 하나가 다른 하나의 순열인지 판단하라
*/

object Permutation {

def permutation1(a: String, b: String): Boolean = {
if (a.trim.length != b.trim.length) {
false
} else {
a.sorted.equalsIgnoreCase(b.sorted)
}
}

def permutation2(a: String, b: String, p: Array[Char] => Array[Int]): Boolean = {
if (a.trim.length != b.trim.length) {
false
} else {
val aArr: Array[Int] = p(a.toCharArray)
val bArr: Array[Int] = p(b.toCharArray)

aArr.deep == bArr.deep
}
}


def main(args: Array[String]) {
println(permutation1("aaccbb", "bbccaa"))

println(permutation2("aaccbb", "bbccaa", ca => {
val arr = new Array[Int](256)
ca.foreach(
c => arr(c.toInt) = arr(c.toInt) + 1
)

arr
}))
}
}

1. 순열 판단 기준을 Char 의 출현횟수를 비교하여 판단

2. 문자열의 길이가 같고 두 문자열의 각 Char 의 출현횟수가 같다면 순열

3. Char 가 가질 수 있는 최대 크기의 배열을 생성 후, 문자열에 존재하는 각 Char 에 해당하는 배열 번호의 값을 증가 시킨 후, 해당 배열을 리턴하는 함수를 인자로 받는 고차함수 를 작성

4. 이렇게 생성한 두 문자열의 배열이 같은지 배열1.deep == 배열2.deep 으로 검사 

(자바에는 이런게 없음)

5. 일부러 고차함수를 써서 해결하려고 노력함.