科大讯飞笔试题iflytek序列查找

给定一个输入的字符串,在字符串中找到有多少个不相同序列的“iflytek”,其中“i”,“f”,"l","y","t","e","k"必须按照前后顺序排序,但不要求是连续的。例如:“iafeelytek”中也存在一个“ixfxxlytek”的序列,可以认为是找到1个“iflytek”,又如“iflyttek”存在“iflytxek”和“iflyxtek”两个不同序列的“iflytek”,查找过程中大小写不敏感,字符串长度小于10000。

输入 输出
"iflytekiflytek"8
"iflylytfetkeefek"24
"iflytek's voice technology ranks first in the word"5

思路

在字符串任意一个位置,如果是”k“,则它之前的字串中”iflytek“的个数等于”iflyte“的个数。依此类推”iflyte“的个数可由”iflyt“个数算得。所以我们用一个数组来记录以下这些子串的累计个数。

"i", "if", "ifl", "ifly", "iflyt", "iflyte", "iflytek"

遍历字符串并更新该数组,最后”iflytek“的累加值就是答案。

object Solution {

  def findIflytek(str: String):Int = {
    val nsbInit = List.fill(7)(0) // num of substring {i, if, ifl, ...}
    str.foldLeft(nsbInit){(nsb, c) =>
      "iflytek".indexOf(c.toLower) match {
        case -1 => nsb
        case 0  => nsb.updated(0, nsb.head + 1)
        case i  => nsb.updated(i, nsb(i) + nsb(i-1))
      }
    }.last
  }

  def main(args:Array[String]): Unit = {
    val s0 = "iflytekiflytek";
    val s1 = "iflylytfetkeefek";
    val s2 = "iflytek's voice technology ranks first in the word";
    println(findIflytek(s0));
    println(findIflytek(s1));
    println(findIflytek(s2));
  }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值