package com.dazhongdianping.interview;
import java.util.HashMap;
import java.util.Map;
/**
* 求一个字符串中不重复字符的最长子串,如字符串"abcdefghiud",最长的不重复的子串为"abcdefghiu"
* @author yangjianzhou
*
*/
public class MaxSubstring {
public static void main(String[] args) {
longestNodupSubstring("abcdefghijhh");
}
/**cursor里面存放字符的在字符串中的位置
* lengAt[i]存放以字符string.charAt(i)结尾的最长子字符串的长度
* @param string
*/
public static void longestNodupSubstring(String string)
{
int len = string.length();
if(len>0){
Map<Character,Integer> cursor = new HashMap<Character,Integer>();
cursor.put(string.charAt(0), 0);
int [] lengthAt = new int[string.length()];
lengthAt[0] =1;
int max =0;
for(int i = 1 ;i<len;i++){
char c = string.charAt(i);
if(cursor.containsKey(c)){
lengthAt[i] = Math.min(lengthAt[i-1]+1, i-cursor.get(c));
}else {
lengthAt[i] = lengthAt[i-1]+1;
}
max = Math.max(max, lengthAt[i]);
cursor.put(c, i);
}
for(int i=0;i<len;i++){
if(max == lengthAt[i]){
System.out.println(string.substring(i-max+1, i+1));
}
}
}
}
}
运行结果:
abcdefghij
分享到:
相关推荐
[Java]算法练习-最长无重复字符子串练习题
其中,第5题“最长回文子串”是经典的字符串处理问题,对于Java程序员来说,理解和解决这个问题至关重要。下面将详细探讨这个题目以及相关的Java编程知识点。 **题目描述:** 给定一个字符串`s`,找到`s`中的最长...
总之,理解和熟练掌握如何用Java解决LeetCode第3题“无重复字符的最长子串”不仅能提升你在求职面试中的竞争力,还能强化对字符串处理、哈希表以及滑动窗口等编程技巧的理解。通过不断地练习和优化,你将能够在面对...
java笔试题回文子串LPS-LCS-算法-分析 最长公共子串(LCS)问题是一直使用的经典计算问题。 该项目探索 LCS,它的一个特例,最长回文子串 (LPS) 问题,以及它的概括以及不同的问题域如何影响算法性能。 我对这些问题...
本话题聚焦于一个经典的算法问题——“查找最长公共子串”。这是一道典型的字符串算法题,主要考察对字符串操作和动态规划的理解。 首先,我们需要明确什么是“公共子串”。如果一个字符串s是另一个字符串t的子串,...
Java算法实现代码主要涵盖了许多计算机科学中的核心算法,这些算法是编程基础,也是解决复杂问题的关键工具。在Java中实现这些算法,可以帮助开发者更好地理解和应用它们。以下将详细阐述一些常见的Java算法及其重要...
KMP(Knuth-Morris-Pratt)算法是一种在文本串中查找子串出现位置的字符串搜索算法。它由D.E. Knuth、V. Morris和J.H. Pratt于1970年提出,主要解决了在主串中查找模式串出现的情况,避免了不必要的回溯,提高了效率...
在本压缩包中,我们关注的是Java编程语言在解决LeetCode算法问题上的应用,特别是针对第3题“无重复字符的最长子串”(Longest Substring Without Repeating Characters)的解决方案。这是一道非常经典的字符串处理...
Java算法大全源码包是一个非常宝贵的资源,包含了各种经典的算法实现,总计超过100种。这个源码包是学习和提升Java编程能力,特别是算法理解与应用的绝佳材料。以下将详细介绍其中可能涵盖的一些重要算法及其应用: ...
在编程领域,求解两个字符串的最长公共子串是一个经典问题,主要应用于文本处理、比较和搜索算法。这里我们将深入探讨如何使用Java实现这一方法,同时结合华为在线判题平台(OJ)的要求来编写代码。 首先,我们需要...
这个名为“Java经典算法源码实例”的资源集合提供了一系列用Java语言实现的常见算法,对于深入理解算法原理、提高编程技能以及优化代码性能具有极大的帮助。下面,我们将详细探讨这些算法及其应用。 1. **排序算法*...
Java算法大全是一份珍贵的学习资源,它包含了近100种常见的算法实现,用Java语言编写,对于希望提升自己在算法领域技能的开发者来说,这是一个不可多得的工具。这份资料可以帮助你深入理解各种算法的工作原理,提升...
Java算法大全是一个全面涵盖近100种算法的资源包,专为Java程序员设计,旨在提升他们的算法理解和实现能力。这个压缩包包含了丰富的算法实例、解释和代码,可以帮助开发者深入理解算法背后的逻辑,并能有效地应用到...
通过以上分析,我们可以看到解决这类问题的核心思想是双指针法的应用,利用两个指针来动态地确定子串的边界,从而高效地找到满足条件的最长子串。此外,不同的编程语言在实现上存在细微差别,但基本的算法思路是一致...
Java Lintcode 阶梯训练是针对Java程序员提升算法能力的一个在线训练平台,它提供了大量的编程题目,帮助开发者磨炼编程技巧,尤其是对于算法和数据结构的理解。本训练主要聚焦于第二章的内容,通常第二章会涉及基础...
- **Manacher's Algorithm**:解决在线查找字符串中最长回文子串的问题。 - **Rabin-Karp滚动哈希**:用于字符串查找,利用哈希减少比较次数。 6. **堆**: - **最大堆**和**最小堆**:维护一个具有特定性质的...
在本压缩包“php-leetcode题解之无重复字符的最长子串.zip”中,包含的是关于使用PHP解决LeetCode算法问题的代码实现,特别是针对“无重复字符的最长子串”这一经典问题的解答。这个问题是LeetCode中的第3题,也被...
总结来说,最长模式匹配算法是处理字符串比较的关键技术,通过学习和掌握KMP、Boyer-Moore、Rabin-Karp等经典算法,并在Java中实现,可以有效地找出两个字符串之间的最大相似部分,这对于分析和理解字符间的差异至关...
通过学习和实践LeetCode上的Java算法题目,不仅可以提高编程技能,还能为面试做好充分准备,了解互联网公司通常对候选人的技术要求。不断挑战自己,不断学习,才能在竞争激烈的IT行业中保持竞争力。
"JAVA经典算法收集整理 以及Java算法大全(近100种算法打包)" 是一个宝贵的资源库,涵盖了各种基础到高级的算法,对于学习和提升Java编程能力具有极大的价值。 这个压缩包中的文件列表可能包括了各种算法的实现...