面试题:给定a、b字符串,判断b是否为a的变位词(scala版本)

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
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值