求一个字符串中字符不重复的连续的子串
来源:互联网 发布:淘宝卖家人工电话 编辑:程序博客网 时间:2024/06/06 09:45
求一个字符串中字符不重复的连续的子串,例如abcabcda最长的一个字符没有重复的为abcd。采用动态规划法,把上一次出现不重复的结果放在一个整型数组里面a[128],这个数组里面存放的为每个字符出现的相对于字符串的偏移量,例如字符串abca,b的ascii为98,位置为1,则a[98] = 1;记录每个出现的字符偏移量,当出现重复字符的时候,计算当前的长度,如果大于maxLen更新长度,并记下起始位置。还要把重复字符前面的字符的位置清空,例如abcb当第二个b出现的时候,要清除第一个b之前的所有字符位置信息。
#include <iostream>using namespace std;int subStr(char *str, char *result){ int len = strlen(str); int strChar[128]; //记录对应字符在str中的offset for(int k=0; k<128; k++) strChar[k] = -1; char *pResult = str; //指向结果起始地址 int maxLen = 0;//记录最长的串的长度 int i=0; int tempLen = 0; //这个长度维护很重要,并不是重复出现字符位置之差,可能前面还有 while(i < len) { if(strChar[str[i]] == -1) { strChar[str[i]] = i; tempLen++; i++; //这里也容易出错,就是这个字符串在结尾的时候 if(str[i] == '\0' && tempLen > maxLen) { maxLen = tempLen; pResult = &str[i-maxLen]; } } else { if(tempLen > maxLen) { maxLen = tempLen; pResult = &str[i-maxLen]; } for(int j=0; j<128; j++) { if(strChar[j] < strChar[str[i]] && strChar[j] != -1) { tempLen--; strChar[j] = -1; } } strChar[str[i]] = i; i++; } } memcpy(result, pResult, maxLen); result[maxLen] = '\0';}int main(){ char str[] = "abbcabcdefgdcabcdefgh"; char result[100] = {0}; subStr(str, result); cout<<result<<endl; return 0;}
- 求一个字符串中字符不重复的连续的子串
- 求字符串中不重复字符的最长子串
- 字符串中不重复连续字符子串的长度最大值
- 求一个字符串中最长的非重复连续子串
- 求字符串中不包含重复字符的最长子串的长度
- 重复子串问题(二):求一个字符串中连续出现次数最多的子字符串
- 从字符串S中找出不包含重复字符的最大连续子字符串长度
- lc#3求字符串中不包含重复字符的最大长度子串
- 求字符串中最长无重复字符的子串
- 求字符串中最长无重复字符的子串
- 求字符串中最长无重复字符的子串
- 求字符串中最长无重复字符的子串
- 求字符串中最长无重复字符的子串
- 求字符串中最长无重复字符的子串
- 求字符串中最长无重复字符的子串
- 求一个字符串的最长无重复字母的连续子串
- 从字符串中找出一个最长的不含重复字符的子字符串
- 一个字符串中最长的不重复子串
- ARM地址重映射的通俗解释
- HDU 4067
- sizeof() 使用大全
- 求数组中的最大和最小值
- struts2错误:The Struts dispatcher cannot be found.
- 求一个字符串中字符不重复的连续的子串
- 使用Javascript动态创建表格,不同的方法,巨大的运行时间差异!
- UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现
- NYOJ 73 比大小
- 文本处理工具
- js 中break 与continue的区别
- 一维二维数组共用一次new
- 丢手帕问题java 实现
- Qt4设计自定义钟表控件(插件法)