最长的连续相同字符的字符串和最长连续不相同字符的子字符串问题
来源:互联网 发布:正德福飞机模型淘宝 编辑:程序博客网 时间:2024/05/16 19:13
1、给定一个字符串s,获取其最长的连续相同字符的子字符串,实现代码如下
#include<iostream>#include<string>using namespace std;string longestSameCharacter(string &s){int slen = s.length();if (slen == 0){return "";}int first = 0;int len = 1;int maxfirst = 0;int maxlen = 1;int i = 1;while (i != slen){if (s[i] == s[i - 1]){len = i - first + 1;if (len > maxlen){maxfirst = first;maxlen = len;}}else{first = i;}++i;}return s.substr(maxfirst, maxlen);}int main(){string s1 = "a";string s2 = "abgakgsaksse";string s3 = "abccccccccf";string s4 = "ahiengkehkigfioaa";cout << longestSameCharacter(s1) << endl;cout << longestSameCharacter(s2) << endl;cout << longestSameCharacter(s3) << endl;cout << longestSameCharacter(s4) << endl;system("pause");return 0;}
实验结果如下所示,
1、给定一个字符串s,获取其最长的连续不相同字符的子字符串,实现代码如下
#include<iostream>#include<string>#include<vector>using namespace std;string LongestSubstring1(string &s)//哈希表法,时间复杂度O(n^2){int slen = s.length();if (slen == 0){return "";}int i, j, len;int count[256];//保存每个字符是否出现int maxfirst = 0;int maxlen = 1;for (i = 0; i != slen; ++i){fill(count, count + 256, 0);count[s[i]] = 1;for (j = i + 1; j != slen; ++j){if (count[s[j]] == 0){count[s[j]] = 1;}elsebreak;}len = j - i;if (len > maxlen){maxfirst = i;maxlen = len;}}return s.substr(maxfirst,maxlen);}string LongestSubstring(string &s)//哈希表法,时间复杂度O(n){int slen = s.length();if (slen == 0){return "";}vector<int> pos(256, -1);//记录字符的最新位置int curfirst = 0;//当前字符的计数开始位置int len = 0;//以该字符结尾的无重复字符的子串长度int maxfirst = 0;//最长无重复子串的起始位置int maxlen = 0;//最长无重复子串的长度for (int i = 0; i != slen; ++i){if (pos[s[i]] == -1){++len;}else{if (curfirst <= pos[s[i]]){len = i - pos[s[i]];curfirst = pos[s[i]] + 1;}else{++len;}}pos[s[i]] = i;if (len > maxlen){maxlen = len;maxfirst = i - maxlen + 1;}}return s.substr(maxfirst, maxlen);}int main(){string s1 = "";string s2 = "qwnfenpglqdq";string s3 = "abacd";string s4 = "ababababcdef";string s5 = "thodvabcdeineigndienhg";cout << LongestSubstring(s1) << endl;cout << LongestSubstring(s2) << endl;cout << LongestSubstring(s3) << endl;cout << LongestSubstring(s4) << endl;cout << LongestSubstring(s5) << endl;system("pause");return 0;}代码已通过leetcode平台验证,实验结果如下所示,
0 0
- 最长的连续相同字符的字符串和最长连续不相同字符的子字符串问题
- [面试题] 查找最长不含相同字符的连续子串
- 求字符串中由连续的相同字符组成的最长子串(如果有两个及两个以上的最长子串,则输出第二个)
- ACdream 计算最长非连续相同字符的个数
- 【原】完全删除字符串中连续相同的字符
- 编程找出字符串的最长子串,要求子串的所有字符相同
- 找出字符串中的最长子串,要求子串的所有字符相同
- 字符串中最长的连续出现的字符
- 两个字符串的最长公共子序列(可以不连续)
- 找出一个字符串中最长连续相同子串
- 删除连续相同的字符串
- 求一个字符串中最长的相同字符字串 不区分大小写
- ACdream 计算最长连续相同字符的个数
- 将字符串中连续相同的字符表达成字符加个数的形式输出
- 找出字符串的最长子串,要求子串的所有字符相同,如:"abcdeeefgh"结果是"eee"
- JAVA两个字符串截取相同的最长子字符串
- 匹配两个字符串中,相同且最长的子字符串
- 找出字符串中连续的子字符
- Java之旅--跨域(CORS)
- 《深入浅出Node.js》学习笔记——(三)异步I/O
- c语言的数据类型在oc中的对应
- 从HttpServletRequest获取各种路径总结
- Python模块学习——optparse
- 最长的连续相同字符的字符串和最长连续不相同字符的子字符串问题
- java-IO操作——使用字节流读写数据
- 三种主流Web架构
- javaweb总结(4) - HTTP协议
- 解决JLINK v8 连接到电脑后显示无法识别的USB设备
- javac命令无法使用解决办法
- Base 128 Varints 编码
- 本公子今天开博
- mysql 异常解决