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

25.6.17学习总结

32. 最长有效括号https://leetcode.cn/problems/longest-valid-parentheses/

typedef struct {char a[30005];int index[30005];int top, index_top;
} stack;
int longestValidParentheses(char* s) {int mark[30005] = {0};stack A;A.top = 0, A.index_top = 0;int num = 0, num_temp = 0, i;for (i = 0; * (s + i) != '\0'; i++) {if (*(s + i) == '(') {A.a[A.top++] = '(';A.index[A.index_top++] = i;} else {if (A.top > 0 && A.a[A.top - 1] == '(') {A.top--;mark[A.index[(A.index_top--) - 1]] = 1;mark[i] = 1;}}}for (int j = 0; j < i; j++) {if (mark[j] == 1)num_temp++;else {if (num_temp > num)num = num_temp;num_temp = 0;}}if (num_temp > num)num = num_temp;return num;
}

1. 栈辅助匹配括号对

  • 使用栈记录未匹配的左括号 '(' 的位置及其索引。

  • 当遇到左括号时,将其压入栈 a,并记录其索引到 index 数组中。

  • 当遇到右括号 ')' 时,检查栈是否非空且栈顶是左括号:

    • 若匹配成功,弹出栈顶的左括号,并标记该左括号和当前右括号的位置为有效(在 mark 数组中标记为 1)。

2. 标记有效位置

  • 通过栈操作,所有匹配成功的括号对的位置会被标记为 1,无效的位置保持为 0

3. 统计最长连续有效长度

  • 遍历 mark 数组,统计连续为 1 的最大长度,即为最长有效括号子串的长度。

8. 字符串转换整数 (atoi)https://leetcode.cn/problems/string-to-integer-atoi/

int myAtoi(char* s) {int length = strlen(s), q = 0, flag = 0;while (q < length && s[q] == ' ')q++;if (q < length && (s[q] == '-' || s[q] == '+')) {flag = (s[q] == '+') ? 0 : 1;q++;}long long int a = 0;while (q < length && s[q] >= '0' && s[q] <= '9') {if (a > (INT_MAX - (s[q] - '0')) / 10)return flag ? INT_MIN : INT_MAX;a = a * 10 + s[q] - '0';q++;}return flag ? -a : a;
}
  1. 使用 long long int 类型的变量 a 作为中间结果,避免在计算过程中溢出。

  2. 溢出检查 :在每次将新数字字符加入 a 之前,检查是否会导致 a 超过 INT_MAX 的范围。

    • 如果 a > (INT_MAX - digit) / 10,说明再乘以 10 并加上当前数字 digit 就会溢出,此时直接返回 INT_MININT_MAX(根据符号 flag)。

  3. 累加数字 :将当前字符转换为数字后,累加到 a 中。

  4. 索引后移 :继续处理下一个字符。

5. 最长回文子串https://leetcode.cn/problems/longest-palindromic-substring/

char* longestPalindrome(char* s) {int length = strlen(s);int max = 0, index;for (int i = 0; i < length; i++) {int left = i, right = i;{while (left >= 0 && right < length && s[left] == s[right]) {left--, right++;}} if (right - left - 1 > max) {max = right - left - 1;index = i;}left = i, right = i+1;{while (left >= 0 && right < length && s[left] == s[right]) {left--, right++;}}if (right - left - 1 > max) {max = right - left - 1;index = i;}}int start,end;if(max%2==1){start=index-((max+1)/2-1);end=index+((max+1)/2-1);}else {start=index-(max/2-1);end=index+max/2;}for(int i=start,j=0;i<=end;i++,j++){s[j]=s[i];}s[max]='\0';return s;
}

回文子串的中心可以是单个字符(奇数长度)或两个字符之间的空隙(偶数长度)。代码通过遍历每个字符,分别扩展两种情况:

  • 奇数长度回文 :以当前字符 i 为中心,向左右扩展。

  • 偶数长度回文 :以当前字符 ii+1 之间的空隙为中心,向左右扩展。

每次扩展时,比较左右字符是否相等,直到不再匹配为止。记录扩展后的最大回文长度和对应的中心位置。

相关文章:

  • java上传base64数据流的本地存储并返回给前端URL接口实现
  • Vue的路由配置我们平时需要去手动配置吗?还是说默认配置就可以了
  • Kafka 向 TDengine 写入数据
  • CSS3 渐变效果
  • Android及Harmonyos实现图片进度显示效果
  • 百度垂搜数据管理系统弹性调度优化实践
  • AI办公提效,Deepseek + wps生成ppt
  • 基于Java的Excel列数据提取工具实现
  • FastGPT、百度智能体、Coze与MaxKB四大智能体平台在政务场景下的深度对比
  • 【人工智能下的智算网络】广域网优化
  • 双token三验证(Refresh Token 机制​)
  • 冒泡排序C语言版
  • 极大补充ggplot2的统计分析能力
  • 使用WinUSB读写USB设备
  • 使用s3cmd 2.x 与 Cyberduck 管理在 DigitalOcean Spaces 对象存储中的数据
  • 跨语言RPC:使用Java客户端调用Go服务端的JSON-RPC服务
  • 性能测试|数据说话!在SimForge平台上用OpenRadioss进行汽车碰撞仿真,究竟多省时?
  • Leetcode-​713. 乘积小于 K 的子数组​
  • 45-Oracle 索引的新建与重建
  • phpstorm无缝切换vscode
  • 如何建设微信网站/当日网站收录查询统计
  • 网站主页设计要点/seo网络推广有哪些
  • 网站怎么优化自己免费/独立站谷歌seo
  • 阜新网站推广/网站优化软件费用
  • 长沙城乡建设网站首页/google play三件套
  • 做外贸业务去哪些网站/百度竞价点击价格