JavaScript 中查找数组中最长连续序列的位置

javascript 中查找数组中最长连续序列的位置

本文旨在提供一种高效的 JavaScript 方法,用于在一个由特定字符组成的字符串中,找出最长连续目标字符序列的起始和结束位置,并返回包含长度、起始索引和结束索引的数组。我们将分析常见错误,并提供优化的解决方案,确保代码的正确性和性能。

问题分析

原始代码尝试通过分割字符串来确定最长序列,这种方法存在几个问题:

greatest 变量赋值问题: greatest 变量在循环中被不断覆盖,没有正确比较和保存最长序列的长度。tillGreatest 变量计算错误: tillGreatest 变量计算了所有短于最长序列的序列长度之和,包括最长序列之后的序列,导致起始索引计算错误。索引跟踪困难: 分割字符串后,难以准确跟踪原始字符串中的起始索引。逻辑复杂: 使用分割增加了代码的复杂性,降低了可读性和维护性。

优化方案:直接遍历字符串

为了解决上述问题,建议直接遍历字符串,避免分割操作。这种方法可以更精确地跟踪起始索引和长度,从而简化代码逻辑并提高效率。

实现步骤

初始化: 定义一个 answer 数组,用于存储最长序列的长度、起始索引和结束索引,初始值设为 [0, 0, 0]。遍历字符串: 使用 for 循环遍历字符串的每个字符。记录起始索引: 使用 start 变量记录当前连续序列的起始索引。如果当前字符不是目标字符(例如 “_”),则更新 start 为下一个字符的索引。计算长度并更新结果: 如果当前字符是目标字符,计算当前连续序列的长度 i + 1 – start。如果该长度大于或等于 answer[0](当前最长长度),则更新 answer 数组为 [i + 1 – start, start, i]。返回结果: 遍历完成后,返回 answer 数组。

代码示例

var widestPasture = function (landscape) {    let answer = [0, 0, 0];    for (let i = 0, start = 0; i = answer[0]) {            answer = [i + 1 - start, start, i];        }    }    return answer;};console.log(widestPasture("_-___-__-____-______-_"));// -> [6, 14, 19]console.log(widestPasture("_-___-__-___-"));// -> [3, 9, 11]

代码解释

answer = [0, 0, 0]:初始化结果数组,分别代表最长长度、起始索引、结束索引。for (let i = 0, start = 0; i if (landscape[i] != “_”) { start = i + 1; }:如果当前字符不是 _,则更新 start 为下一个字符的位置。else if (i + 1 – start >= answer[0]) { answer = [i + 1 – start, start, i]; }:如果当前字符是 _,并且当前连续序列长度大于等于已知的最长长度,则更新结果数组。return answer:返回包含最长长度、起始索引和结束索引的结果数组。

注意事项

该方案假设目标字符是 “_”,如果目标字符不同,需要修改代码中的判断条件。该方案优先返回靠后的最长序列,如果需要返回靠前的最长序列,需要将 else if (i + 1 – start >= answer[0]) 改为 else if (i + 1 – start > answer[0])。如果字符串为空,或者不包含目标字符,则返回 [0, 0, 0]。

总结

通过直接遍历字符串,我们可以避免分割操作带来的复杂性和错误,从而更高效、更准确地找到最长连续序列的位置。这种方法不仅简化了代码逻辑,还提高了代码的可读性和可维护性。在实际应用中,可以根据具体需求进行适当的修改和优化。

立即学习“Java免费学习笔记(深入)”;

以上就是JavaScript 中查找数组中最长连续序列的位置的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1519602.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月20日 12:34:05
下一篇 2025年12月8日 23:33:32

相关推荐

  • 使用 amCharts 5 访问结构化数据对象中的值

    本文档旨在解决在使用 amCharts 5 时,如何访问和处理嵌套在数据对象中的值。当数据源包含多层结构,例如数组中的对象,而每个对象又包含数组时,直接通过 valueYField 访问数据可能会遇到问题。本文将提供一种预处理数据的方法,以便 amCharts 5 能够正确解析和显示这些数据。 理解…

    好文分享 2025年12月20日
    000
  • JavaScript 中查找数组中最长连续序列的起始和结束位置

    本文旨在提供一种高效的 JavaScript 方法,用于在一个由特定字符构成的字符串中,查找最长连续相同字符序列的起始和结束索引,并返回序列长度、起始索引和结束索引组成的数组。我们将分析常见错误,并提供一个简洁明了的解决方案,帮助开发者更好地理解和应用字符串处理技巧。 在处理字符串时,经常会遇到需要…

    2025年12月20日
    000
  • JavaScript 中查找最长连续字符序列的位置

    本文旨在提供一种在 JavaScript 字符串中查找最长连续特定字符序列(例如 _)的起始和结束索引以及长度的有效方法。我们将分析一种常见的错误实现,并提供一个更简洁、高效的解决方案,避免不必要的字符串分割,直接遍历字符串,从而更准确地确定最长序列的位置。 问题分析 在处理字符串时,经常需要找到满…

    2025年12月20日
    000
  • Flask应用中动态表格数据的高效提交与处理:前端与后端的最佳实践

    本教程旨在解决向Flask后端提交动态表格数据时遇到的常见问题,特别是输入字段命名缺失和数据结构处理不当。文章将详细阐述前端HTML结构、JavaScript数据收集与AJAX提交的正确姿势,以及Flask后端如何有效解析这些数据,确保动态内容的完整传输与处理。 1. 理解问题根源:输入字段命名与数…

    2025年12月20日
    000
  • JavaScript 实现动态颜色切换的互动表格游戏

    本文将介绍如何使用 JavaScript 和 HTML 创建一个简单的互动表格游戏,其中点击单元格会切换其周围单元格的颜色。我们将讨论如何初始化指定单元格的颜色,并提供一种更简洁的代码实现方案,使代码更易于维护和扩展,同时增加动态生成表格大小的功能。 初始化指定单元格颜色 在游戏开始时,我们可能需要…

    2025年12月20日
    000
  • JavaScript实现动态颜色切换的互动表格游戏

    本文将指导你如何使用JavaScript和HTML创建一个简单的互动表格游戏,该游戏允许用户通过点击单元格来切换其颜色以及周围单元格的颜色。我们将讨论如何初始化特定单元格的颜色,并提供代码优化建议,以简化实现并提高可维护性,最终实现动态调整表格大小的功能。 初始化单元格颜色 在游戏开始时,我们可能需…

    好文分享 2025年12月20日
    000
  • JavaScript 动态颜色切换游戏:初始状态设置与代码优化

    本文将指导你如何在 JavaScript 和 HTML 构建的颜色切换游戏中,预先设置某些单元格为红色,以及如何优化代码结构,使其更加简洁和易于维护。我们将探讨如何使用二维数组来表示游戏初始状态,并利用更高效的事件监听和状态更新方法来简化代码。 初始状态设置 要在游戏开始时将某些单元格设置为红色,最…

    2025年12月20日
    000
  • CSS响应式下拉菜单:实现内容自动推移的布局技巧

    本文详细介绍了如何使用CSS和JavaScript构建一个响应式下拉菜单,并解决其展开时下方内容不自动下移、收起时不自动上移的问题。核心在于避免对下拉内容使用position: absolute,而是让其参与文档流,从而实现内容区域的动态调整,确保页面布局的流畅与响应性。 引言与问题分析 在网页设计…

    2025年12月20日
    000
  • Flask应用中动态表格数据的提交与处理:JQuery与Python集成指南

    本教程详细讲解了如何将前端动态生成的表格数据发送至Flask后端应用。核心在于为动态输入字段正确命名、使用AJAX进行数据提交,以及在Flask中有效解析接收到的数据,避免了常见的数据丢失和重复提交问题,确保数据传输的准确性和可靠性。 1. 理解问题根源:输入字段命名与事件处理 在将动态生成的表格数…

    2025年12月20日
    000
  • 使用jQuery和Flask处理动态表格数据提交的教程

    本教程详细介绍了如何使用jQuery从动态生成的HTML表格中收集数据,并将其高效、准确地提交到Flask后端。内容涵盖了HTML结构设计、JavaScript数据收集与AJAX提交、以及Flask后端数据解析的关键步骤,并强调了命名规范和表单提交机制的最佳实践,帮助开发者避免常见错误。 1. 动态…

    2025年12月20日
    000
  • 使用 amCharts 5 处理结构化数据对象中的值

    本文档介绍了在使用 amCharts 5 时,如何处理包含嵌套结构的数据对象。由于 amCharts 5 本身不支持直接访问数据字段中的子对象,因此需要对数据进行预处理,以便正确地在图表中显示和使用这些数据。本文将提供一个有效的解决方案,通过数据预处理来提取嵌套值,并将其应用于图表。 理解问题 在使…

    2025年12月20日
    000
  • JavaScript中构建多维数组:高效添加嵌套元素的技巧

    本教程深入探讨了在JavaScript中构建多维数组的有效方法,重点介绍如何将多个嵌套数组作为独立元素添加到一个主数组中。我们将通过具体示例,详细讲解并比较使用扩展运算符(…)和forEach方法来实现这一目标的技巧,帮助开发者更好地管理和操作复杂数据结构。 理解JavaScript中的…

    2025年12月20日
    000
  • 在 amCharts 中访问结构化数据对象中的值

    本文档旨在解决在 amCharts 中处理包含嵌套数据结构的 JSON 对象时,如何正确访问和解析数据,以便在图表中展示。由于 amCharts 本身的数据字段功能不支持直接访问子对象,因此我们将介绍一种预处理数据的方法,以便能够正确地将数据绑定到图表序列上。 理解问题 在使用 amCharts 创…

    2025年12月20日
    000
  • JavaScript 多维数组:创建 To-Do List 教程

    本文旨在帮助开发者理解如何在 JavaScript 中创建和操作多维数组,并通过一个 To-Do List 的实例,演示如何向数组中添加嵌套数组,以及如何利用 push 方法和展开运算符 … 或 forEach() 方法来实现这一目标,最终生成包含多个任务的 To-Do List。 理解…

    好文分享 2025年12月20日
    000
  • iOS Safari 浏览器全屏模式的限制与适配策略

    本文探讨了在 iPhone Safari 浏览器上实现全屏模式时遇到的常见问题,特别是针对非媒体元素(如 div 或包含非媒体内容的 iframe)的 requestFullscreen API 限制。我们将解释 iOS Safari 的独特行为,并提供基于 CSS 的替代方案以及针对媒体内容的正确…

    2025年12月20日
    000
  • 解决 touch-action: pan-y 导致点击事件失效的问题

    本文旨在解决在Web开发中,当元素应用了 touch-action: pan-y CSS属性以优化触摸滚动体验时,可能导致在触摸滑动后首次点击事件失效的问题。我们将通过一种JavaScript事件监听机制,区分用户的滑动与点击行为,从而确保链接或按钮在任何情况下都能响应点击,同时不影响SEO。 理解…

    2025年12月20日 好文分享
    000
  • 解决Touch Action干扰点击事件的问题

    本文旨在解决在使用 touch-action: pan-y 属性后,可能出现的点击事件失效问题。通过监听 touch 事件,判断用户是否进行了滑动操作,从而决定是否触发链接的点击行为。该方案避免了SEO问题,并确保用户在滑动后能够正常点击链接。 在使用 touch-action 属性时,尤其是 to…

    2025年12月20日
    000
  • 解决Touch Action导致Click事件失效的问题

    在使用touch-action属性控制元素的触摸行为时,可能会遇到一些意想不到的问题。例如,当一个元素设置了touch-action: pan-y属性(允许垂直方向的滑动)并被包含在标签中时,在触摸滑动后,第一次点击该元素可能无法触发链接的跳转。这是因为浏览器可能会将滑动操作和点击操作混淆。为了解决…

    2025年12月20日
    000
  • 优化 touch-action 下的点击体验:解决滑动后点击失效问题

    本文旨在解决在Web开发中使用 touch-action: pan-y 样式时,导致元素在滑动操作后首次点击事件失效的问题。通过利用JavaScript的触摸事件(touchstart、touchmove、touchend)来精确判断用户意图是滑动还是轻触,并结合 isSwiping 标志位,实现对…

    2025年12月20日
    000
  • 解决Touch Action阻止Click事件的问题

    解决Touch Action阻止Click事件的问题 当我们在网页中使用 touch-action: pan-y 来控制元素的触摸行为,防止垂直方向的滚动时,可能会遇到一个问题:在滑动操作之后,第一次点击事件会被阻止,导致链接或其他需要点击触发的功能失效。这会严重影响用户体验。本文将提供一种解决方案…

    2025年12月20日
    000

发表回复

登录后才能评论
关注微信