C# 查找包含字符所有匹配项的最大子字符串

C# 查找包含字符所有匹配项的最大子字符串,c#,C#,我需要找出最大的子字符串,它包含C中所有出现的字符 示例-输入字符串:我的名字是granar Nee要找出包含所有字符a出现的最大子字符串,结果是ame is grana 请在算法方面帮助我?这应该可以做到: var text = "my name is granar"; var firstA = text.IndexOf("a"); var LastA = text.LastIndexOf("a"); int length = LastA - firstA + 1; if (firstA !=

我需要找出最大的子字符串,它包含C中所有出现的字符

示例-输入字符串:我的名字是granar Nee要找出包含所有字符a出现的最大子字符串,结果是ame is grana

请在算法方面帮助我?

这应该可以做到:

var text = "my name is granar";
var firstA = text.IndexOf("a");
var LastA = text.LastIndexOf("a");
int length = LastA - firstA + 1;
if (firstA != -1)
    var result = text.Substring(firstA, length);
算法:int begin=-1,end=-1

在for循环中 在“开始”和“结束”中保存“a”的第一个索引 每次遇到“a”时不断更新结束

开始,结束

对于较大的字符串,这是一个更好的算法,因为我们只对整个字符串迭代一次


SubstringIndexOf'a',LastIndexOf'a'-IndexOf'a'您的代码在哪里!到目前为止你试过什么?一行并不总是比多行好。你做的事情不止一次,如果没有一次,也不安全,你会得到一个例外。在第一个版本中使用变量;调用两个IndexOf函数会增加解决方案的复杂性。在内部它将运行两次。嗯,我有多行的答案,但它是如此简单,我认为它应该是一行解决方案。你的权利@Renuka。Modified@JamesDev:仍然是可能的异常,但仍为+1
 static void Main(string[] args)
    {
        int begin = -1, end = -1;

        string input = "my name is granar";

        bool isfirst = true;
        for (int i = 0; i < input.Length; i++)
        {
            if(input[i] == 'x')
            {
                if (isfirst)
                {
                    begin = i;
                    end = i;
                    isfirst = false;
                }
                else
                    end = i;
            }
        }

        if (begin != -1)
        {
            string substr = input.Substring(begin, end - begin + 1);

            Console.WriteLine(substr);
        }
        else Console.WriteLine("Not Found");
        Console.ReadKey();
    }