`
fishisnow
  • 浏览: 5646 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

求一个字符串中不含重复元素的最大子串

阅读更多
首先,子串是连续的序列,不连续的不是字串,其次是不含重复元素。
例如,字符串: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简单实现查找一个字符串中最长不重复子串的方法

    在Python编程中,查找一个字符串中最长不重复子串是一项常见的字符串处理任务。这个任务的目标是找到一个字符串中连续的子串,这个子串中的字符都不重复,且这个子串的长度是所有不重复子串中最长的。这个问题可以...

    sql函数实现去除字符串中的相同的字符串

    `@result`用于存储不含重复字符的新字符串,而`@temp`用于暂存每次循环处理的子串。在while循环中,我们使用`charindex()`函数查找逗号的位置,然后使用`substring()`函数提取子串。如果子串不在`@result`中,就将其...

    Python查找最长不包含重复字符的子字符串算法示例

    1. **字符串遍历**:遍历字符串是解决问题的基础,我们需要逐个字符地访问字符串中的每一个元素。 2. **哈希表(字典)的应用**:使用哈希表存储每个字符及其出现的位置,以便快速查找和更新。 3. **滑动窗口技术**...

    LeetCode解题总结

    12.3 最长不含重复元素的子串 12.4 存放的最大水量 13. 动态规划 13.1 三角形从顶到底的最小路径和 13.2 最大连续子数组 13.3 字符串的所有子回文字符串 13.4 最长公共子序列问题 13.5 字符串的编辑距离 13.6 不同...

    苏州大学历年上机真题以及保研期末期中习题1

    13. **字符串处理**:例如分割字符串、转换字符串、去除重复元素等,涉及到Python的内置字符串方法。 14. **日期计算**:处理日期和时间,可以使用Python的datetime模块。 15. **算法应用**:如图论中的路径查找、...

    LeetCode判断字符串是否循环-leetcode:leetcode

    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. 空串与空格串的区别 - **空串**:指的是不包含任何字符的串,通常用`""`...

    LeetCode算法设计

    1. **求子集[M]**:给定一组不含重复元素的整数数组`nums`,返回其所有可能的子集。 #### 十一、分治(Divide & Conquer) **分治**是一种递归的思想,将大问题分解为小问题解决。 1. **两个有序数组中的中位数和...

    C++_String

    返回指向字符串第一个元素的指针。 **1.2.12 empty** `bool empty() const;` 如果字符串为空,则返回true。 **1.2.13 end** `const_iterator end() const;` 返回指向字符串末尾之后的迭代器。 **1.2.14 erase...

    编程内功心法-编程算法题库

    解决这个问题的关键在于如何高效地维护一个不含重复字符的子串,通常会用到哈希表来记录字符及其最后出现的位置。 - **字母异位词分组**:这是一个关于字符串处理的经典问题,主要考察如何判断两个字符串是否为...

    Interview

    如果不存在,则返回-1给定一个不含重复元素的整数nums,返回该数组所有可能的子集(幂集)二叉树的遍历链表的基本操作给定一个链表,两两交换其中相邻的中断,并返回交换后的链表。斐波那契数给定一个整数n,生成...

    leetcode1231c-leetcode:leetcode

    给定一个字符串,找到不含重复元素的最长子串 Input "abcabcbb" Output 3 Input "bbbbb" Output 1 给定两个有序数组,长度分别m和n,寻找两个有序数组的中位数,时间复杂度要在O(log(m+n)) Input [1, 3] [2] Output ...

    Modern C++ 11 知识点

    动态规划可以用来解决0-1背包问题,而DFS则可以用于组合问题,比如生成所有不含重复元素的子集。 上述知识点主要围绕C++11的STL、算法和数据结构的应用,以及通过leetcode平台对这些知识点进行实战演练。熟练掌握...

    2012年安徽省达内杯程序设计大赛题目

    - **解决方案**:使用二维数组来存储菱形的形状,其中每个元素代表一个数字。首先确定菱形的大小和中心位置,然后按照从中心向外扩展的顺序填充数字。填充时,数字应根据其与中心的距离递减。最后,遍历二维数组并...

    C++string资料

    这行代码声明了一个名为 `str` 的 `string` 对象,并通过默认构造函数初始化为一个空字符串。 #### 三、`string` 类的构造函数与析构函数 `string` 类提供了多种构造函数来满足不同的初始化需求: - **空字符串...

    c++string用法详解.pdf

    `getline()`函数以指定分隔符(默认是`\n`)将输入流中的内容分割成多行,并返回不含分隔符的字符串。`substr()`函数用于从字符串中提取子串,`find()`函数查找子串的位置。 接着,使用`std::sort()`对用户名进行...

    Kmp讲课课件

    - **数组模拟**:使用数组来实现字典树,通常会创建一个大小固定的数组,每个元素对应一个字符,数组中的每个元素又指向另一个数组。 - **指针型字典树**:使用指针来连接各个节点,这种方式更加灵活,但也可能占用...

    c_[1].net常用函数和方法集

    - `HashSet&lt;T&gt;`: 不含重复元素的集合。 4. **控制流**: - `for`, `foreach`: 循环结构,用于遍历数组、集合或自定义序列。 - `if`, `else`: 条件语句,根据条件执行不同的代码块。 - `switch`: 多分支选择语句...

    ezj v2.9 官方教程.pdf

    - **string1.replaceAll(find, replacement[, ignoreCase])**:替换字符串中的所有`find`子串为`replacement`;可选参数`ignoreCase`控制是否忽略大小写。 - **string1.splitBefore(separator, count)**:按照分隔符...

Global site tag (gtag.js) - Google Analytics