gpt4 book ai didi

scala - 在列表中的重复对之间添加一个标记字符

转载 作者:行者123 更新时间:2023-12-04 08:59:08 25 4
gpt4 key购买 nike

我正在做一个练习,我需要弄清楚如何在列表中的两个重复元素之间添加指定的标记字符。
输入 - 一个字符串
输出 - 字符串对列表
两条规则;

  • 如果输入字符串有重复字符,则返回一个字符 x需要是
    加在他们之间。对于前; trees会变成tr, ex, es
  • 如果重复的字符对是 xx , 添加 q它们之间。对于前;boxx变成 bo,xq, x

  • 两个规则在输入上一起运行,例如;
    如果输入是 HelloScalaxxxx输出应该是 List("He", "lx", "lo", "Sc", "al", "ax", "xq", "xq", "x")我得到了使用以下代码的第一条规则,并努力满足第二条规则。
     input.foldRight[List[Char]](Nil) {
    case (h, t) =>
    println(h :: t)
    if (t.nonEmpty) {
    (h, t.head) match {
    case ('x', 'x') => t ::: List(h, 'q')
    case _ => if (h == t.head) h :: 'x' :: t else h :: t
    }
    } else h :: t
    }
    .mkString("").grouped(2).toSeq
    我想我很接近,对于输入 HelloScalaxxxx它产生 List("He", "lx", "lo", "Sc", "al", "ax", "xq", "xq", "xq") ,但有一个额外的 q在最后一对。
    我不想使用基于正则表达式的解决方案。寻找惯用的 Scala 版本。
    我尝试搜索现有答案,但没有运气。任何帮助,将不胜感激。谢谢你。

    最佳答案

    我假设您想申请 xx规则第一...但你可以决定。

    "Trees & Scalaxxxx"
    .replaceAll("(x)(?=\\1)","$1q")
    .replaceAll("([^x])(?=\\1)","$1x")
    .grouped(2).toList
    //res0: List[String] = List(Tr, ex, es, " &", " S", ca, la, xq, xq, xq, x)
    这是非正则表达式产品。
    "Trees & Scalaxxxx"
    .foldLeft(('_',"")){
    case (('x',acc),'x') => ('x', s"${acc}qx")
    case ((p,acc),c) if c == p &&
    p.isLetter => ( c , s"${acc}x$c")
    case ((_,acc),c) => ( c , s"$acc$c")
    }._2.grouped(2).toList

    关于scala - 在列表中的重复对之间添加一个标记字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63646022/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com