case class compareStr(val str: String) {
//假设对比的数组都是小写字母,下面的方法将字符串中的每个字符转换成哈希数字,用map生成数组
def fill(str: String): IndexedSeq[Int] = {
val k = str.map(_.hashCode)
k
}
//这个方法可以把thisStr跟n都省掉,但是可读性会变很差
//使用diff函数对比,如果返回为空,则表示匹配
def belongTo(str: String): Boolean = {
val n = this.str.length
val thisStr = fill(this.str)
val thatStr = fill(str)
val result = (0 to str.length-n).map{ x =>
val thatStrSlice = thatStr.slice(x, x+n)
thisStr.diff(thatStrSlice).isEmpty
}
result.contains(true)
}
}
object compareStr {
//隐式转换
implicit def strs(str: String): compareStr = compareStr(str)
//> strs: (str: String)compareStr
val str1 = "eol" //> str1 : String = eol
val str2 = "lel" //> str2 : String = lel
val str3 = "hello" //> str3 : String = hello
str1.belongTo(str3) //> res0: Boolean = false
str2.belongTo(str3) //> res1: Boolean = true
}