using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/*
* Problem 1:
* You are given a string, and the task is to implement a function
* that finds the longest unrepeated string. For example, the longest
* substring without repeating letters for “abcabcbb” is “abc”,
* which the length is 3. For “bbbbb” the longest substring is “b”,
* with the length of 1. For "ababzab", it is "abz" and the length is 3.
* The string contains only lower-cased letters, i.e., 'a'-'z'.
*
*/
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string test1 = "abcadbcbb";
string test2 = "ababzab";
string test3 = "bbbbb";
string result1 = LongestUnrepeatedString(test1);
string result2 = LongestUnrepeatedString(test2);
string result3 = LongestUnrepeatedString(test3);
System.Console.WriteLine("longest unrepeated string of \"{0}\" is \"{1}\".", test1, result1);
System.Console.WriteLine("longest unrepeated string of \"{0}\" is \"{1}\".", test2, result2);
System.Console.WriteLine("longest unrepeated string of \"{0}\" is \"{1}\".", test3, result3);
System.Console.ReadLine();
}
static string LongestUnrepeatedString(string input)
{
if (input == null) return null;
// <character, index+1>
Dictionary<Char, Int32> dict = new Dictionary<Char, Int32>();
int n = input.Count();
string longestString = "";
int longestCount = 0;
int i = 0, j = 0;
while (i < n && j < n)
{
// try to extend the range [i, j]
if (!dict.ContainsKey(input.ElementAt(j)))
{
dict.Add(input.ElementAt(j), j++);
}
else
{
// Update the longest unrepeated string
if (longestCount < j - i)
{
longestCount = j - i;
longestString = input.Substring(i, longestCount);//substring, update
}
//Update "i" and "j", the new range
i = j = dict[input.ElementAt(j)] + 1;
dict.Clear();
}
}
return longestString;
}
}
}
查找最长数字子串
最新推荐文章于 2024-03-18 22:11:29 发布