leetcode Longest Substring with At Most Two Distinct Characters
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了leetcode Longest Substring with At Most Two Distinct Characters,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含984字,纯文字阅读大概需要2分钟。
内容图文
找到最多含有两个不同字符的子串的最长长度。例如:eoeabc,最长的是eoe为3,其他都为2.
思路:
用p1,p2表示两种字符串的最后一个出现的下标位置。初始p1为0. p2为-1.start初始化为0,表示两种字符串的开头。
只要遍历一次string就可以得到结果了。
首先我们要确定p2的值,那么i要一直到不等于s[p1]的值为止,那么位置就是p2了。
然后继续往后如果来一个字符等于之前两种的其中一种,那么就要更新最后一次出现的下标。根据是谁就更新谁。
如果是新的字符了,那么就要更新start了,start肯定就是小的那个p1+1,因为p1是一种字符的最后一个位置,他的下一位肯定就是另一个字符了。
每次计算大的结束点,p1或者p2,与start中间的个数就是我们要的长度了。最后返回最长的就是了。
因为存在只有一种字符的情况,所以要判断如果p2最后还是-1,那么就返回整个串的长度就是了。代码如下:
因为不能oj,不知道代码有没有bug
int longest159(string s) { if (s.size() == 0) return0; int ans = 0; int p1 = 0, p2 = -1, start = 0; for (int i = 0; i < s.size(); i++) { if (p2 == -1) { if (s[i] == s[p1]) continue; p2 = i; } if (s[i] == s[p1] || s[i] == s[p2]) s[i] == s[p1] ? p1 = i : p2 = i; else { start = min(p1, p2) + 1; p1 < p2 ? p1 = i : p2 = i; } if (max(p1, p2) - start + 1 > ans) ans = max(p1, p2) - start + 1; } if (p2 == -1) return s.size(); return ans; }
原文:http://www.cnblogs.com/higerzhang/p/4185649.html
内容总结
以上是互联网集市为您收集整理的leetcode Longest Substring with At Most Two Distinct Characters全部内容,希望文章能够帮你解决leetcode Longest Substring with At Most Two Distinct Characters所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。