字符串1中存在多少个字符串2
本文关键字:字符串 多少 存在 | 更新日期: 2023-09-27 18:26:33
我正试图找到一种算法,它接受用户的输入(字符串1),然后接受另一个输入(字符串2),然后计算字符串1中有多少字符串2。例如:
字符串1中有2#在这里
string1="##"
string2="#"
answer:2
字符串1中有2##:(第一个索引为0,1,第二个索引为1,2)
string1="###"
string2="##"
answer=2
字符串1中有3个##:(第1个:0,1的索引第2个:1,2的索引第3个:2,3的索引)
string1="####"
string2="##"
answer=3
对于计数#,我们可以简单地这样做:
string1.Length - string2.Length + 1
但我只能让算法适用于这样的例子,而输入可以是任何东西。现在我需要一个算法来为我做这件事。这是一个适用于我的输入,但不适用于所有输入的y代码。例如,如果字符串2是#a。
string string1 = "#abc##asd###12####";
string string2 = "##";
char[] str2 = string2.ToCharArray();
string[] str1 = string1.Split(str2);
string chars = "";
foreach (string s in str1)
foreach (char c in s)
chars += c;
//Result for chars are:a, b, c, a, s, d, 1, 2
string[] splits = string1.Split(chars.ToCharArray());
//Result for splits are:#, ##, ###, ####
int sum = 0;
for (int i = 0; i < splits.Length; i++)
{
if (splits[i].Length<string2.Length)
continue;
else
sum += splits[i].Length - string2.Length + 1;
}
Console.WriteLine(sum);
在我的算法中,我用字符串2个字符分隔字符串1,然后计算通过split方法创建的字符串[]。
我已经知道我的算法是完全错误的,但无论如何我都无法解决它。我只是放了代码来展示我已经尝试过的东西
如果你在答案中写上算法,那就太好了。我对lambda和linq也有一些了解,所以如果你能通过lambda、linq、func或表达式来解释这一点,那就没问题了
这里有一个工作代码:
string string1 = "#abc##asd###12####";
string string2 = "##";
List<int> indexes = new List<int>();
int index = -1;
while((index = string1.IndexOf(string2, index + 1)) >= 0)
{
indexes.Add(index);
}
Console.WriteLine(indexes.Count);