首先,子串是连续的序列,不连续的不是字串,其次是不含重复元素。
例如,字符串:abcdcefg 显然最大字串是:dcefg
该解法的思想是依次遍历字符串,在另一个数组保存该字符串出现的索引位,通过索引位可得到当前遍历的字串的长度。当字符重复出现的时候,减去之前相同字符出现的索引,便可得到此时字符串长度。每次遍历保存最大字符串长度,在出现重复字符时进行比较更新。
代码如下:
package com.practice;
import java.util.HashMap;
import java.util.Map;
public class GetMaxStr {
public static int getStr(String str) {
if(str.length()==0) return 0;
Map<Character, Integer> map = new HashMap<Character, Integer>();
int[] lengthArr = new int[str.length()];
lengthArr[0] = 1;
map.put(str.charAt(0), 0);
int maxLength = 1;
for(int i=1; i<str.length(); i++) {
Character c = str.charAt(i);
if(map.containsKey(c)) {
lengthArr[i] = i - map.get(c);
maxLength = Math.max(maxLength, lengthArr[i]);
}else {
lengthArr[i] = lengthArr[i-1] + 1;
maxLength = lengthArr[i];
map.put(c, i);
}
}
return maxLength;
}
public static void main(String[] args) {
String str = "aab";
System.out.println(getStr(str));
}
}
测试结果是:2, 即ab
分享到:
相关推荐
在Python编程中,查找一个字符串中最长不重复子串是一项常见的字符串处理任务。这个任务的目标是找到一个字符串中连续的子串,这个子串中的字符都不重复,且这个子串的长度是所有不重复子串中最长的。这个问题可以...
`@result`用于存储不含重复字符的新字符串,而`@temp`用于暂存每次循环处理的子串。在while循环中,我们使用`charindex()`函数查找逗号的位置,然后使用`substring()`函数提取子串。如果子串不在`@result`中,就将其...
1. **字符串遍历**:遍历字符串是解决问题的基础,我们需要逐个字符地访问字符串中的每一个元素。 2. **哈希表(字典)的应用**:使用哈希表存储每个字符及其出现的位置,以便快速查找和更新。 3. **滑动窗口技术**...
12.3 最长不含重复元素的子串 12.4 存放的最大水量 13. 动态规划 13.1 三角形从顶到底的最小路径和 13.2 最大连续子数组 13.3 字符串的所有子回文字符串 13.4 最长公共子序列问题 13.5 字符串的编辑距离 13.6 不同...
13. **字符串处理**:例如分割字符串、转换字符串、去除重复元素等,涉及到Python的内置字符串方法。 14. **日期计算**:处理日期和时间,可以使用Python的datetime模块。 15. **算法应用**:如图论中的路径查找、...
3.找最长不含重复字符子串。逐位扫,保留最近检查位置上的子串。 4.二分查找 5.找最长回文子串 6.模拟 7.10 ,处理溢出问题 8.string转integer,注意处理正负,溢出问题 9.回文数字,10, 10.正则匹配,用动规 11.柱状...
4. Valid Palindrome:判断一个字符串是否为回文字符串,涉及到字符串的遍历和比较。 5. Implement strStr():实现strStr()函数,即在文本中查找模式串的出现,可以使用KMP算法。 6. Reverse Words in a String:...
一个字符串中的一部分连续字符序列被称为该串的**子串**。例如,在字符串“hello world”中,“ello”、“world”等都是它的子串。 #### 2. 空串与空格串的区别 - **空串**:指的是不包含任何字符的串,通常用`""`...
1. **求子集[M]**:给定一组不含重复元素的整数数组`nums`,返回其所有可能的子集。 #### 十一、分治(Divide & Conquer) **分治**是一种递归的思想,将大问题分解为小问题解决。 1. **两个有序数组中的中位数和...
返回指向字符串第一个元素的指针。 **1.2.12 empty** `bool empty() const;` 如果字符串为空,则返回true。 **1.2.13 end** `const_iterator end() const;` 返回指向字符串末尾之后的迭代器。 **1.2.14 erase...
解决这个问题的关键在于如何高效地维护一个不含重复字符的子串,通常会用到哈希表来记录字符及其最后出现的位置。 - **字母异位词分组**:这是一个关于字符串处理的经典问题,主要考察如何判断两个字符串是否为...
如果不存在,则返回-1给定一个不含重复元素的整数nums,返回该数组所有可能的子集(幂集)二叉树的遍历链表的基本操作给定一个链表,两两交换其中相邻的中断,并返回交换后的链表。斐波那契数给定一个整数n,生成...
给定一个字符串,找到不含重复元素的最长子串 Input "abcabcbb" Output 3 Input "bbbbb" Output 1 给定两个有序数组,长度分别m和n,寻找两个有序数组的中位数,时间复杂度要在O(log(m+n)) Input [1, 3] [2] Output ...
动态规划可以用来解决0-1背包问题,而DFS则可以用于组合问题,比如生成所有不含重复元素的子集。 上述知识点主要围绕C++11的STL、算法和数据结构的应用,以及通过leetcode平台对这些知识点进行实战演练。熟练掌握...
- **解决方案**:使用二维数组来存储菱形的形状,其中每个元素代表一个数字。首先确定菱形的大小和中心位置,然后按照从中心向外扩展的顺序填充数字。填充时,数字应根据其与中心的距离递减。最后,遍历二维数组并...
这行代码声明了一个名为 `str` 的 `string` 对象,并通过默认构造函数初始化为一个空字符串。 #### 三、`string` 类的构造函数与析构函数 `string` 类提供了多种构造函数来满足不同的初始化需求: - **空字符串...
`getline()`函数以指定分隔符(默认是`\n`)将输入流中的内容分割成多行,并返回不含分隔符的字符串。`substr()`函数用于从字符串中提取子串,`find()`函数查找子串的位置。 接着,使用`std::sort()`对用户名进行...
- **数组模拟**:使用数组来实现字典树,通常会创建一个大小固定的数组,每个元素对应一个字符,数组中的每个元素又指向另一个数组。 - **指针型字典树**:使用指针来连接各个节点,这种方式更加灵活,但也可能占用...
- `HashSet<T>`: 不含重复元素的集合。 4. **控制流**: - `for`, `foreach`: 循环结构,用于遍历数组、集合或自定义序列。 - `if`, `else`: 条件语句,根据条件执行不同的代码块。 - `switch`: 多分支选择语句...
- **string1.replaceAll(find, replacement[, ignoreCase])**:替换字符串中的所有`find`子串为`replacement`;可选参数`ignoreCase`控制是否忽略大小写。 - **string1.splitBefore(separator, count)**:按照分隔符...