讨论社区

【最长回文子串】提交时提示执行错误,但单独跑测试用例能通过

算法题链接:https://leetcode-cn.com/problems/longest-palindromic-substring/submissions/


问题描述:提交时,系统提示执行错误,且没有任何错误信息提示,出错时的用例输入如下。但我用下方输入去跑测试,是执行通过且没有报错的,为什么提交代码时就报错且没任何提示呢?


"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"


我的Scala代码如下:


import scala.collection.mutable.ArrayBuffer


object Solution {


  case class Record(start: Int, end: Int, maxLength: Int)

  

  def longestPalindrome(s: String): String = {

    val len = s.length

    if (len <= 1) return s

    if (len == 2) {

      if (s(0) == s(1))

        return s

      else

        return s(0).toString

    }


    var str = s(0).toString

    var max = 1


    // 构造可能产生回文串的record

    val list = ArrayBuffer[Record]()

    var start = 0

    while (start < len && len - start > 2) {

      // println("start", start)

      var same = 0

      var loop = true

      for (i <- (start + 2) until  len if loop) {

        if (i == len -1) {

          if (s(i) == s(start)) {

            // println("t1", start, i)

            if (i - start + 1 > max) {

              str = s.substring(start, len)

              max = i - start + 1

            }

          } else if (s(i - 1) == s(start)) {

            // println("t2", start, i - 1)

            if (i - start > max) {

              str = s.substring(start, i)

              max = i - start

            }

          } else {

            // println("t3")

            val end = if (s(i) == s(i - 1)) {

              same += 1

              len

            } else i

            if (same > max) {

              max = same

              str = s.substring(start + 1, end)

            }

          }

        } else {

          if (s(i) != s(i - 1)) {

            if (s(i) == s(start)) {

              // println("t4", start, i)

              val width = Math.min(start, len - i - 1)

              list += Record(start, i, width * 2 + i - start + 1)

            } else {

              // println("t5")

              if (same > max) {

                max = same

                str = s.substring(start + 1, i)

              }

            }

            loop = false

          } else {

            same += 1

            // println("t6", same)

          }

        }

      }

      start += (1 + same)

    }


    // 排序是为了从可能产生最长回文串的record开始判断

    val sortList = list.sortWith((r1, r2) => {

      r1.maxLength > r2.maxLength

    })

    // println(sortList)

    sortList.foreach(item => {

      if (item.maxLength > max) {

        var st = item.start

        var ed = item.end

        while (st - 1 >= 0 && ed + 1 < len && s(st - 1) == s(ed + 1)) {

          st -= 1

          ed += 1

        }

        val ll = ed - st + 1

        if (ll > max) {

          max = ll

          str = s.substring(st, ed + 1)

        }

      }

    })

    str

  }

}


0 人关注了该问题 关注

0

776854974m • 6天前

您好,该问题已修复,感谢您的反馈。

0 个讨论

您需要登录后才可回复
您需要登录后才可以回复