`

java算法----求最长子串

    博客分类:
  • java
 
阅读更多
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算法练习-最长无重复字符子串练习题

    [Java]算法练习-最长无重复字符子串练习题

    java面试-leetcode面试java编程题解之第5题最长回文子串-java题解.zip

    其中,第5题“最长回文子串”是经典的字符串处理问题,对于Java程序员来说,理解和解决这个问题至关重要。下面将详细探讨这个题目以及相关的Java编程知识点。 **题目描述:** 给定一个字符串`s`,找到`s`中的最长...

    java面试-leetcode面试java编程题解之第3题无重复字符的最长子串-java题解.zip

    总之,理解和熟练掌握如何用Java解决LeetCode第3题“无重复字符的最长子串”不仅能提升你在求职面试中的竞争力,还能强化对字符串处理、哈希表以及滑动窗口等编程技巧的理解。通过不断地练习和优化,你将能够在面对...

    java笔试题回文子串-LPS-LCS-Algorithm-Analysis:最长公共子串的实现及相关问题

    java笔试题回文子串LPS-LCS-算法-分析 最长公共子串(LCS)问题是一直使用的经典计算问题。 该项目探索 LCS,它的一个特例,最长回文子串 (LPS) 问题,以及它的概括以及不同的问题域如何影响算法性能。 我对这些问题...

    查找最长公共子串

    本话题聚焦于一个经典的算法问题——“查找最长公共子串”。这是一道典型的字符串算法题,主要考察对字符串操作和动态规划的理解。 首先,我们需要明确什么是“公共子串”。如果一个字符串s是另一个字符串t的子串,...

    java 各类算法实现代码

    Java算法实现代码主要涵盖了许多计算机科学中的核心算法,这些算法是编程基础,也是解决复杂问题的关键工具。在Java中实现这些算法,可以帮助开发者更好地理解和应用它们。以下将详细阐述一些常见的Java算法及其重要...

    kmp算法-基于Java实现的kmp算法.zip

    KMP(Knuth-Morris-Pratt)算法是一种在文本串中查找子串出现位置的字符串搜索算法。它由D.E. Knuth、V. Morris和J.H. Pratt于1970年提出,主要解决了在主串中查找模式串出现的情况,避免了不必要的回溯,提高了效率...

    java-leetcode题解之第3题无重复字符的最长子串.zip

    在本压缩包中,我们关注的是Java编程语言在解决LeetCode算法问题上的应用,特别是针对第3题“无重复字符的最长子串”(Longest Substring Without Repeating Characters)的解决方案。这是一道非常经典的字符串处理...

    java算法大全源码包100多种

    Java算法大全源码包是一个非常宝贵的资源,包含了各种经典的算法实现,总计超过100种。这个源码包是学习和提升Java编程能力,特别是算法理解与应用的绝佳材料。以下将详细介绍其中可能涵盖的一些重要算法及其应用: ...

    java实现求两个字符串最长公共子串的方法

    在编程领域,求解两个字符串的最长公共子串是一个经典问题,主要应用于文本处理、比较和搜索算法。这里我们将深入探讨如何使用Java实现这一方法,同时结合华为在线判题平台(OJ)的要求来编写代码。 首先,我们需要...

    Java经典算法源码实例(Java算法,源码)

    这个名为“Java经典算法源码实例”的资源集合提供了一系列用Java语言实现的常见算法,对于深入理解算法原理、提高编程技能以及优化代码性能具有极大的帮助。下面,我们将详细探讨这些算法及其应用。 1. **排序算法*...

    Java算法大全(源码)

    Java算法大全是一份珍贵的学习资源,它包含了近100种常见的算法实现,用Java语言编写,对于希望提升自己在算法领域技能的开发者来说,这是一个不可多得的工具。这份资料可以帮助你深入理解各种算法的工作原理,提升...

    Java算法大全

    Java算法大全是一个全面涵盖近100种算法的资源包,专为Java程序员设计,旨在提升他们的算法理解和实现能力。这个压缩包包含了丰富的算法实例、解释和代码,可以帮助开发者深入理解算法背后的逻辑,并能有效地应用到...

    华为OD机试C卷- 最长的指定瑕疵度的元音子串.md-私信看全套OD代码及解析

    通过以上分析,我们可以看到解决这类问题的核心思想是双指针法的应用,利用两个指针来动态地确定子串的边界,从而高效地找到满足条件的最长子串。此外,不同的编程语言在实现上存在细微差别,但基本的算法思路是一致...

    java---lintcode阶梯训练第二章

    Java Lintcode 阶梯训练是针对Java程序员提升算法能力的一个在线训练平台,它提供了大量的编程题目,帮助开发者磨炼编程技巧,尤其是对于算法和数据结构的理解。本训练主要聚焦于第二章的内容,通常第二章会涉及基础...

    数据结构与算法经典问题解析-Java语言描述

    - **Manacher's Algorithm**:解决在线查找字符串中最长回文子串的问题。 - **Rabin-Karp滚动哈希**:用于字符串查找,利用哈希减少比较次数。 6. **堆**: - **最大堆**和**最小堆**:维护一个具有特定性质的...

    php-leetcode题解之无重复字符的最长子串.zip

    在本压缩包“php-leetcode题解之无重复字符的最长子串.zip”中,包含的是关于使用PHP解决LeetCode算法问题的代码实现,特别是针对“无重复字符的最长子串”这一经典问题的解答。这个问题是LeetCode中的第3题,也被...

    最长模式匹配算法 高效比较两段字符间的差别

    总结来说,最长模式匹配算法是处理字符串比较的关键技术,通过学习和掌握KMP、Boyer-Moore、Rabin-Karp等经典算法,并在Java中实现,可以有效地找出两个字符串之间的最大相似部分,这对于分析和理解字符间的差异至关...

    力扣算法-互联网公司常见算法面试题

    通过学习和实践LeetCode上的Java算法题目,不仅可以提高编程技能,还能为面试做好充分准备,了解互联网公司通常对候选人的技术要求。不断挑战自己,不断学习,才能在竞争激烈的IT行业中保持竞争力。

    JAVA经典算法收集整理 以及Java算法大全(近100种算法打包).rar

    "JAVA经典算法收集整理 以及Java算法大全(近100种算法打包)" 是一个宝贵的资源库,涵盖了各种基础到高级的算法,对于学习和提升Java编程能力具有极大的价值。 这个压缩包中的文件列表可能包括了各种算法的实现...

Global site tag (gtag.js) - Google Analytics