找出字符串的最长不重复子串,输出最大的子字符串

比如: ababcdebc,那他最大的子字符串就是:abcde

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication4
{
    class Program
{
        static void Main(string[] args)
{
            string s = "abcababcdefgfg";
            char[] list = s.ToCharArray();
            FindMaxSubDifferenceString ss = new FindMaxSubDifferenceString();
ss.FindMaxSubDifferenceStringS(list, s.Length);
            string s1 = "aaaaaa";
            char[] list1 = s1.ToCharArray();
ss.FindMaxSubDifferenceStringS(list1, s1.Length);
            string s2 = "ababab";
            char[] list2 = s2.ToCharArray();
ss.FindMaxSubDifferenceStringS(list2, s2.Length);
            string s3 = "abcababcdefgfgabcababcdefgfg";
            char[] list3 = s3.ToCharArray();

ss.FindMaxSubDifferenceStringS(list3, s3.Length);
}

}
 
    public class FindMaxSubDifferenceString
{
        public bool IsDup(char[] list, int len, char targetChar, int begin, int end, out int targetIndex)
{
targetIndex = -1;
            // Note: first, we need to check all parameters are valid, such as list is null, len >0, or begin <end, begin>0, end<len, etc
            for(int i=begin;i<=end; i++)
{
                if(list[i]==targetChar)
{
targetIndex = i;
                    return true;
}
}
 
            return false;
}
        public void FindMaxSubDifferenceStringS(char[] list, int len)
{
            if (list == null) return;
            if (len <= 0) return;
            int maxSubStringLen = 0;
            int maxSubStringBeginIndex = 0;
            int currentMaxSubStringBeginIndex = 0;
            int currentMaxSubLen = 0;
            for (int i = 1; i < len; i++)
{
                int dupIndex = -1;
                if (IsDup(list, len, list[i], currentMaxSubStringBeginIndex, i - 1, out dupIndex))
{
currentMaxSubLen = i - currentMaxSubStringBeginIndex;
                    if (currentMaxSubLen > maxSubStringLen)
{
maxSubStringLen = currentMaxSubLen;
maxSubStringBeginIndex = currentMaxSubStringBeginIndex;
}
                    else
{
}
currentMaxSubStringBeginIndex = dupIndex + 1;
}
                else //not dup
{
}
}
 
            if (maxSubStringLen == 0)
{
maxSubStringLen = len;
}
            Console.Write("Input string: ");
            for (int i = 0; i < len; i++)
{
                Console.Write(list[i]);
}
            Console.WriteLine("");
            Console.Write("After Input: ");
            for (int i = maxSubStringBeginIndex; i < maxSubStringBeginIndex + maxSubStringLen; i++)
{
                Console.Write(list[i]);
}
            Console.WriteLine("");
}

}
}
 
时间: 2024-10-24 06:35:26

找出字符串的最长不重复子串,输出最大的子字符串的相关文章

字符串问题之 找到字符串的最长无重复子串

给定一个字符串str, 返回str的最长无重复字符子串长度 例如 str="abcd' 返回4 str="aabcb" 最长"abc" 返回3 解决本题的思路非常非常有趣,这种思路必须要学会: 本题目可以做到  时间复杂度O(N)  str长度N     空间复杂度O(M)  M是字符编码 根据字符编码 大小 申请 map  key表示字符  value表示最近出现的位置 int pre 遍历到的字符str[i] 以为str[i]结尾的最长无重复字符子串开

找出字符串中最长不重复子串

public class AE { public static void main(String[] args) { //String s = "abacdecfgab"; String s = "abacdbe"; System.out.println(noDuplicate(s)); } public static String noDuplicate(String str) { String sub = ""; String result

找出字符串的最长不重复字串

这是我遇到的一道校招题目: 给定一字符串只包含数字,请写一个算法,找出该字符串中的最长不重复子串(不重复是指子串中每一元素不同于子串中其他元素) 如: "120135435"最长不重复子串为 "201354" 要求用java或者c来写,我用了java. /** * 思想: *      从头开始截取字符串,只要后一个元素不在截取的字符串里,就更新截取,多截取一个元素. *       如果发现后一个元素出现在字符串里, 将最后截取的字符串存为临时结果,开始位置后移一

找出给定的一个字符串中最大的不重复子串,不重复子串即一个子串中不出现两个相同的字符

思路一:先找出一个字符串中所有子串,再找出所有子串中最长的那一个:思路二:每次找出的子串长度都比上一次的子串长,则最后的子串即是最长子串的长度数.我选择的是第二种方法. public class FindSubstringMaxlengthNoduplicate { public static void main(String[] args) { String s = "adcdghcwioizhfksjdyuiodfhjskhgkhgeisdcjdkh"; ArrayList<

找出所有最长连续重复子串及其个数

问题描述: 找出字符串中所以最长连续重复子串及其个数 比如:输入:123234,最大连续重复字符串为23,个数为2 输入:5555,最大连续重复字符串为555,个数为2 输入:aaabbb 最大连续重复字符串为aa,个数为2:和bb,个数为2 必须存在重复的字符串才算,只出现一次的不算.可能存在多个相同长度的不同字符串,比如aaabbb. 分析:最直接的想法是利用两个指针循环遍历比较所有可能的子串,记录下所有子串长度,然后找到所有最大连续子串及其个数,时间复杂度为O(n^2).在网上看到一种利用

给定一个set字符和一个正数k,找出所有该做set它可以由长度构成k该字符串集合 print-all-combinations-of-given-length

// 给定一个set字符和一个正数k,找出所有该做set它可以由长度构成k该字符串集合 /* Input: set[] = {'a', 'b'}, k = 3 Output: aaa aab aba abb baa bab bba bbb Input: set[] = {'a', 'b', 'c', 'd'}, k = 1 Output: a b c d package recursion; import java.util.ArrayList; public class N_sets_form

查找字符串中最长无重复字符的子串

设定一个当前子字符串:tempString 设定一个保持最长无重复子串的数组:list 思路: 从第一个字符开始判断, 如果当前子串不包括当前的字符,则当前子串加入当前的字符成为新的当前子串, 如果当前子串包括当前的字符,判断当前字符在当前字符串中的位置,根据这个位置把字符串分成两个字符串,如果后面一个末尾加当前字符为新的当前子字符串,判断当前子串跟list数组中的子串长度,如果当前子串长,则清空list,把当前子串加入:如果相等,直接将当前子串加入list. 最后list的中的子字符串就是最长

最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和

参考:http://www.ahathinking.com/archives/124.html 最长公共子序列 1.动态规划解决过程 1)描述一个最长公共子序列 如果序列比较短,可以采用蛮力法枚举出X的所有子序列,然后检查是否是Y的子序列,并记录所发现的最长子序列.如果序列比较长,这种方法需要指数级时间,不切实际. LCS的最优子结构定理:设X={x1,x2,……,xm}和Y={y1,y2,……,yn}为两个序列,并设Z={z1.z2.……,zk}为X和Y的任意一个LCS,则: (1)如果xm=

关于最长不重复子串的问题

题目描述:Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest