我有两个字符串:第一个值是"catdog",第二个值是"got".
我正试图找一个正则表达式告诉我"得到"的字母是否在"catdog"中.我特别希望避免出现重复字母的情况.例如,我知道"得到"是匹配,但"gott"不匹配,因为"catdog"中没有两个"t".
编辑:
根据Adam在下面的回答,这是我在我的解决方案中工作的C#代码.感谢所有回复的人.
注意:我必须将char转换为int并减去97以获得数组的适当索引.在我的情况下,字母总是小写.
private bool CompareParts(string a, string b)
{
int[] count1 = new int[26];
int[] count2 = new int[26];
foreach (var item in a.ToCharArray())
count1[(int)item - 97]++;
foreach (var item in b.ToCharArray())
count2[(int)item - 97]++;
for (int i = 0; i < count1.Length; i++)
if(count2[i] > count1[i])
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
你正在使用错误的工具来完成工作.这不是正则表达式能够轻松处理的东西.幸运的是,没有正则表达式,这样做相对容易.您只需计算两个字符串中每个字母的出现次数,并比较两个字符串之间的计数 - 如果对于字母表中的每个字母,第一个字符串中的计数至少与第二个字符串中的计数一样大,那么你的标准就满足了.由于您没有指定语言,因此这里的伪代码答案应该可以轻松翻译成您的语言:
bool containsParts(string1, string2)
{
count1 = array of 26 0's
count2 = array of 26 0's
// Note: be sure to check for an ignore non-alphabetic characters,
// and do case conversion if you want to do it case-insensitively
for each character c in string1:
count1[c]++
for each character c in string2:
count2[c]++
for each character c in 'a'...'z':
if count1[c] < count2[c]:
return false
return true
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1635 次 |
最近记录: |