您的位置:首页 > 编程语言 > C#

Longest Substring with At Most Two Distinct Characters

2016-05-07 20:37 330 查看
Given a string, find the length of the longest substring T that contains at most 2 distinct characters.

For example, Given s = “eceba”,

T is “ece” which its length is 3.

namespace ConsoleApplication3
{
using System;
using System.Collections.Generic;
class Program
{
private static string maxSubStrWithNChars(string str, int n)
{
if (n < 1)
return "";
int s = 0, e = 0, maxS = 0, maxLen = 0;
Dictionary<char, int> dic = new Dictionary<char, int>();
while (s <= e && e < str.Length)
{
while (e < str.Length && dic.Count <= n)
{
if (!dic.ContainsKey(str[e]))
{
dic.Add(str[e], 1);
}
else
{
++dic[str[e]];
}

if (e - s + 1 > maxLen && dic.Count <= n)
{
maxLen = e - s + 1;
maxS = s;
}

++e;
}
while (s <= e && dic.Count > n)
{
if (--dic[str[s]] == 0)
{
dic.Remove(str[s]);
}
++s;
}
}
return str.Substring(maxS, maxLen);
}
static void Main(string[] args)
{
string str1 = "";                //expect: 0 ""
string str2 = "a";                //expect: 1 "a"
string str3 = "aa";                //expect: 2 "aa"
string str4 = "aba";            //expect: 3 "aba"
string str5 = "abcd";            //expect: 2 "ab"
string str6 = "abcdedcba";        //expect: 3 "ded"
string str7 = "abbcdededcba";    //expect: 5 "deded"
string str8 = "eceba";            //expect: 3 "ece"
string str9 = "abaece";            //expect: 3 "aba"
string str10 = "ababcd";        //expect: 4 "abab"
string str11 = "cababcd";        //expect: 4 "abab"
string str12 = "abcdefgabcdefg";//expect: 2 "ab"
string str13 = "ababababababab";//expect: 14 "ababababababab"

Console.WriteLine(maxSubStrWithNChars(str1, 2));
Console.WriteLine(maxSubStrWithNChars(str2, 2));
Console.WriteLine(maxSubStrWithNChars(str3, 2));
Console.WriteLine(maxSubStrWithNChars(str4, 2));
Console.WriteLine(maxSubStrWithNChars(str5, 2));
Console.WriteLine(maxSubStrWithNChars(str6, 2));
Console.WriteLine(maxSubStrWithNChars(str7, 2));
Console.WriteLine(maxSubStrWithNChars(str8, 2));
Console.WriteLine(maxSubStrWithNChars(str9, 2));
Console.WriteLine(maxSubStrWithNChars(str10, 2));
Console.WriteLine(maxSubStrWithNChars(str11, 2));
Console.WriteLine(maxSubStrWithNChars(str12, 2));
Console.WriteLine(maxSubStrWithNChars(str13, 2));
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Leetcode C#