java - 如何在最长子数组的长度平衡问题中找到开始位置和结束位置
问题描述
给定一些花括号,包括左花括号和右花括号。找到平衡的最长子数组的长度。另外,找到 longes 子数组的位置
那是平衡的开始和结束。如果多个子数组具有相同的长度,请考虑第一个。
输入
5
{}{}{
输出
4
1 4
解释
{}{} 是平衡的,长度为 4。它从位置 1 开始,到位置 4 结束(基于 1 的索引)
我有长度,但我无法获得第一个位置和最后一个位置。有人可以告诉如何调整函数以获得第一个位置和最后一个位置吗?
int findMaxLen(string str)
{
int n = str.length();
stack<int> stk;
stk.push(-1);
int result = 0;
for (int i=0; i<n; i++)
{
if (str[i] == '{')
stk.push(i);
else
{
stk.pop();
if (!stk.empty())
result = max(result, i - stk.top());
else stk.push(i);
}
}
return result;
}
解决方案
有人可以告诉如何调整函数以获得第一个位置和最后一个位置吗?
您只跟踪迄今为止最大平衡子串的长度。您还需要跟踪它的开始或结束索引,所以而不是
result = max(result, i - stk.top());
使用if
具有相应条件的块:
if (result < i - stk.top()) {
// ...
}
. 在该块的主体中,更新两者result
以及相应的结束或开始索引。完成后,长度和一个索引的组合会为您提供另一个索引。细节留作练习。
推荐阅读
- asp.net-core - 如何在无视图 Web API 中配置防伪保护
- node.js - 如何像使用 axios auth 选项一样通过 apollo 客户端传递应用程序凭据
- bash - 如何用bash中的一个空格替换字符串中无限数量的空格?
- android-studio - 使用改造的发布方法不起作用,logcat 说它为空
- python - 在 mongodb python 上根据日期上传和过滤年龄
- excel - 添加或删除命名范围时,VBA 代码处理停止
- typo3 - 致命错误:未捕获的 ArgumentCountError:函数 TYPO3\CMS\Core\Imaging\IconFactory::__construct() 的参数太少
- java - 在 Intellij 上清除屏幕的 Java 指令
- docker - POD + 服务 Kubernetes Hoverfly
- javascript - 逻辑运算符 JavaScript &&