求一个字符串中不含重复元素的最大子串
2015-07-14 17:09
148 查看
首先,子串是连续的序列,不连续的不是字串,其次是不含重复元素。
例如,字符串:abcdcefg 显然最大字串是:dcefg
该解法的思想是依次遍历字符串,在另一个数组保存该字符串出现的索引位,通过索引位可得到当前遍历的字串的长度。当字符重复出现的时候,减去之前相同字符出现的索引,便可得到此时字符串长度。每次遍历保存最大字符串长度,在出现重复字符时进行比较更新。
代码如下:
测试结果是:2, 即ab 4000
例如,字符串: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 4000
相关文章推荐
- 定义一个栈的数据结构,实现min函数,要求push,pop,min时间复杂度是0(1);找出字符串中的最长子串,要求子串不含重复字符,时间复杂度是O(n);
- 定义一个栈的数据结构,实现min函数,要求push,pop,min时间复杂度是0(1);找出字符串中的最长子串,要求子串不含重复字符,时间复杂度是O(n);
- 用三重循环求一个字符串的最大回文串(连续重复出现的最长子串)
- 查找一个字符串中最大重复子串(C语言版)
- 求一个字符串的最长不重复子串的最大长度
- 求一个字符串中的最大连续重复子串
- 在一个字符串中找一个最大重复子串
- leetcode-java.T003_LongestSubstringWithoutRepeatingCharacters 给定一个字符串,找字符中的最大非重复子串
- 得到一个字符串最大无重复子串长度
- 从字符串中找出一个最长的不含重复字符的子字符串
- 寻找一个字符串中的最长重复子串
- LeetCode给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
- C++找出字符串中最长的不含重复字符的子串
- 输入一个字符串,输出该字符串中最大对称子串的长度
- 字符串最长不含重复字符的子串长度
- 自己写的一个后缀树算法查找一个字符串的最长重复子串
- 通过两个数组字符串。各选取一个字符串元素。使其长度绝对值最大。求最大绝对值
- 一个字符串,找出不含有重复字符的最长子串的长度
- 求一个字符串的最长重复子串
- 【每日面试题】给定一个字符串,求出其最长的重复子串