当前位置: 首页 > wzjs >正文

怎么做查询网站吗南宁优化推广服务

怎么做查询网站吗,南宁优化推广服务,wordpress搜索间隔时间,深圳做网站最好的公司这道题放在动态规划里属实是有点难为人了,感觉用动态规划来做反而更难理解了,这道题用索引栈来做相当好理解,这里先讲下索引栈的思路。 索引栈做法 我们定义一个存放整数的栈,定义一个全局变量result来记录最长有效子串的长度&a…


这道题放在动态规划里属实是有点难为人了,感觉用动态规划来做反而更难理解了,这道题用索引栈来做相当好理解,这里先讲下索引栈的思路。

索引栈做法

我们定义一个存放整数的栈,定义一个全局变量result来记录最长有效子串的长度,然后我们通过下标来遍历整个字符串s,当我们遇到(时,就将其索引压入栈中,当我们遇到)且栈顶元素对应(时,此时遇到了一对闭合的括号,我们直接将栈顶的(弹出,再用当前元素的下标i减去当前栈顶元素的下标,就能得到当前有效字串的长度,若我们遇到)但是栈顶元素不是(时,说明还没匹配上,直接将当前元素的下标压入栈中。值得注意的是,当我们遇到一对匹配的括号,并将栈顶元素弹出后,如果此时栈为空,则说明从开头到现在的元素组成的子串都是有效合法的,这里为什么不能计算当前元素与栈顶元素下标之差?因为我们无法保证当前的栈是第一次被清空,如果是第一次被清空,则可以这么做,但如果是第4次被清空,直接用元素与栈顶元素下标之差得到的是第4小段合法子串的长度,正确的结果应当是4小段拼接起来的长度,因此这里要直接使用当前元素的下标+1来计算结果。

class Solution {
public:int longestValidParentheses(string s) {stack<int> st;  //索引栈int result = 0;for(int i = 0; i < s.size(); i++){if(!st.empty() && s[st.top()] == '(' && s[i] == ')'){  //遇到一对匹配的括号st.pop();   //将匹配上的'('弹出if(st.empty())   //若栈清空了,则说明从s[0]到当前位置所组成的字符串是格式正确且连续的result = max(result, i + 1);else result = max(result, i - st.top());  //若栈还没清空,则说明只是局部匹配,仅记录最外层左右括号之间的索引之差}else st.push(i);}return result;}
};

动态规划做法

感觉动态规划在状态转移的时候晦涩难懂,感觉自己想根本想不到,我是参考了一下这个大佬的题解才慢慢想明白的。建议先去看一下他的题解。接下来我们开始动规五部曲。
1.确定dp[i]的含义:以下标为i的元素结尾的情况下所能取到的最长有效子串的长度
2.确定递推公式
(1)当s[i] == '('时,dp[i] = 0;
(2)当s[i] == ')'且s[i - 1] == '('时,dp[i] = i >= 2 ? dp[i - 2] + 2 : 2;
(3)当s[i] == ')'但s[i - 1] == ‘)‘时,先判断s[i - dp[i - 1] -1]是否为’(’
如果是,当i - dp[i - 1] - 2 >= 0时,则dp[i] = dp[i - 1] + 2 + dp[i - dp[i - 1] - 2]
否则dp[i] = dp[i - 1] + 2;
3.dp数组初始化 dp[0] = 0;
4.确定遍历顺序:从左往右遍历
5.打印数组(省略)
这里重点解释下递归公式。

  1. 当我们以(结尾时,无论前面的字符串是否闭合,这个字符串一定闭合不了,所以dp[i]赋值为0毫无疑问。
  2. 当我们以)结尾时,如果上一个字符为(,则我们遇到了形如......()的情况,我们先判断(前是否还有字符,如果有,则dp[i] = dp[i - 2] + 2;,如果没有,则dp[i] = 2,这也很好理解。
  3. 当我们以)结尾时,如果上一个字符为),则我们遇到了形如......))的情况,倘若dp[i-1]的有效序列的前一个是((即s[i - dp[i - 1] -1] == '('),这样才能够和当前)配对(言下之意就是上一个)必须闭合,当前的)才能闭合),由于在这种...((...))情况下dp[i - 1]一定会小于dp[i],我们还需要考虑与当前括号匹配的前面是否还有字符,若还有字符,则dp[i] = dp[i - 1] + 2 + dp[i - dp[i - 1] - 2];,否则dp[i] = dp[i - 1] + 2;
    感觉第三种情况特别难想,好烧脑。。。
class Solution {
public:int longestValidParentheses(string s) {//1.确定dp[i]的含义:以下标为i的元素结尾的情况下所能取到的最长有效子串的长度//2.确定递推公式  //(1)当s[i] == '('时,dp[i] = 0;//(2)当s[i] == ')'且s[i - 1] == '('时,dp[i] = dp[i - 2] + 2;//(3)当s[i] == ')'但s[i - 1] == ')'时,先判断s[i - dp[i - 1] -1]是否为'('//如果是,当i - dp[i - 1] - 2 >= 0时,则dp[i] = dp[i - 1] + 2 + dp[i - dp[i - 1] - 2]//否则dp[i] = dp[i - 1] + 2;//3.dp数组初始化 dp[0] = 0;//4.确定遍历顺序:从左往右遍历//5.打印数组(省略)int result = 0;vector<int> dp(s.size(), 0);for(int i = 1; i < s.size(); i++){if(s[i] == '(')  //以'('结尾一定闭合不了dp[i] = 0;else if(s[i] == ')'){if(s[i - 1] == '(')  //遇到一对'(' ')',括号闭合dp[i] = i >= 2 ? dp[i - 2] + 2 : 2;else{   //遇到')'')'if(i - dp[i - 1] > 0 && s[i - dp[i - 1] -1] == '('){  //遇到"((.....))"if(i - dp[i - 1] - 2 >= 0)dp[i] = dp[i - 1] + 2 + dp[i - dp[i - 1] - 2];else dp[i] = dp[i - 1] + 2;}}}result = max(dp[i], result);}return result;}
};
http://www.dtcms.com/wzjs/437385.html

相关文章:

  • 做公司网站 烟台青岛网站优化
  • 建设工程招投标网最专业的网站seo域名如何优化
  • 网站开发工程师任职要求免费广告投放网站
  • 网站做一些流量互换seo沈阳
  • 织梦网站后台如何做百度优化不死鸟分享友情链接
  • 网页设计制作心得体会朔州seo
  • 宿豫网站建设制作百度指数趋势
  • 世界经理人网站手机版网络推广包括哪些
  • 造纸公司网站建设网上竞价
  • 基层党组织建设网站灰色关键词排名优化
  • 分销pc网站长沙seo排名扣费
  • 三亚网站建设品牌网络推广平台收费不便宜
  • 免费招聘网站推荐关键词优化是怎么做的
  • 个人网站做哪种能赚钱做seo网页价格
  • 个人网站做电影网站网站维护一般都是维护什么
  • 阿里巴巴开网店的详细步骤seo网络优化平台
  • 做网站备负责人风险大吗做一个app平台需要多少钱
  • 请简述网站建设的方法哪个公司要做网络推广
  • 手机版自网站baidu百度首页
  • 网站 建设的必要性潍坊网站外包
  • 巴彦淖尔专业做网站的电商培训机构有哪些?哪家比较好
  • 做qq群头像网站网络安全培训
  • 做家纺的网站百度关键词优化软件排名
  • 好吃易做的家常菜网站网站开发平台有哪些
  • 什么叫网站建设服务上海小红书seo
  • 网站页面优化方法有哪些内容企业互联网推广
  • winserver2008上用iis发布网站上海seo推广平台
  • 没有有知道钓鱼网站在哪儿做网络搭建是干什么的
  • 网站优化如何做pc指数逆冬黑帽seo培训
  • 网站flash制作教程seo是怎么优化推广的