求字符串中的最长不重复子串
来源:互联网 发布:博彦科技数据分析师 编辑:程序博客网 时间:2024/05/27 00:49
题目描述:
给定一字符串只包含数字,请写一个算法,找出该字符串中的最长不重复子串(不重复是指子串中每一元素不同于子串中其他元素)
如:“120135435”最长不重复子串为 “201354”
实现如下:
//时间复杂度O(n)//空间复杂度O(m)class Solution{public: int maxNum(int num1, int num2) { return num1 >= num2 ? num1 : num2; } void maxNonRepetitiveString(string str) { if (str.empty()) return; //map整形数组一共有10个元素,用来保存0-9数字的最后一次出现的下标 int map[10]; //将map数组的所有元素初始化为-1 for (int i = 0; i < 10; ++i) map[i] = -1; int begin = 0; //begin用来记录最长无重复子串的起始下标 int end = 0; //end用来记录最长无重复子串的终止下标 int current = 0; //current用来记录当前得到的无重复子串长度 int pre = -1; //pre用来记录当前无重复子串的起始位置-1 int len = 0; //len用来记录最长无重复子串的长度 for (int j = 0; j < str.length(); ++j) { //判断pre在当前字符最后一次出现位置的左边还是右边 //如果在左边,即pre<map[str[j]],表示在str[j]的位置已经出现了重复的字符了 //如果在右边,即pre>=map[str[j]],表示在str[j]的位置没有出现重复字符 pre = maxNum(pre, map[str[j]]); //计算当前无重复子串的长度 current = j - pre; //比较当前无重复子串长度是否大于最大无重复子串长度 if (len <= current) { begin = pre + 1; //更新无重复子串的起始下标 end = j; //更新无重复子串的终止下标 } len = maxNum(len, current); //更新最长无重复子串的长度 map[str[j]] = j; //更新str[j]字符最后一次出现的位置下标 } //打印最长无重复子串 for (int k = begin; k <= end; ++k) cout << str[k]; }};
阅读全文
0 0
- 求字符串中的,最长不重复子串--java代码
- 求字符串中的最长不重复子串
- 求字符串中的“最长重复子串”
- 求字符串中不重复字符的最长子串
- 求字符串的最长不重复子串
- 求最长不重复子串
- 求最长不重复子串
- 求最长不重复子串
- 求最长不重复子串---LeetCode3
- 求最长不重复子串
- 求字符串的最长重复子串
- 求字符串的最长重复子串
- 求字符串的最长重复子串
- 求最长不重复字符串
- 求字符串的不重复字符的最长子串长度的问题
- 求字符串内不包含重复字符的最长子串
- LeetCode OJ 3.求字符串中最长不重复子串长度问题
- 求一个字符串的最长不重复子串的最大长度
- StringUtils方法全集介绍
- 新手之SSH框中strut2配置
- WKWebView 的使用
- butterknife 使用步骤
- 最好大学定向爬虫
- 求字符串中的最长不重复子串
- centos 编译sipp-3.5.1
- Objective
- smartupload实现上传下载
- java8 HashMap的底层实现
- Android辅助功能原理与基本使用详解-AccessibilityService
- iOS中Block使用注意点及常见问题浅析
- tbb安装与配置
- 深入理解javascript原型和闭包(6)——继承