- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试解决这个问题,虽然我可以使用蛮力解决它,但是以下优化算法为我提供了一些测试用例的错误结果。我尝试了但无法找到代码的问题,任何人都可以帮助我。
问题:给定一个字符串 S 和整数 K,找到整数 C,它等于子串对的数量 (S1,S2) 使得 S1 和 S2 具有相等的长度并且 Mismatch(S1, S2) <= K 其中定义了不匹配函数下面。
失配函数
Mismatch(s1,s2) 是 S1 和 S2 中字符不同的位置数。例如mismatch(bag,boy) = 2(第二个和第三个位置不匹配),mismatch(cat,cow) = 2(同样,第二个和第三个位置不匹配),Mismatch(London, Mumbai) = 6(因为两个字符串中每个位置的字符都不同)。伦敦的第一个字符是“L”,而在孟买是“M”,伦敦的第二个字符是“o”,而在孟买是“u”,依此类推。
int main() {
int k;
char str[6000];
cin>>k;
cin>>str;
int len=strlen(str);
int i,j,x,l,m,mismatch,count,r;
count=0;
for(i=0;i<len-1;i++)
for(j=i+1;j<len;j++)
{ mismatch=0;
for(r=0;r<len-j+i;r++)
{
if(str[i+r]!=str[j+r])
{ ++mismatch;
if(mismatch>=k)break;
}
if(mismatch<=k)++count;
}
}
cout<<count;
return 0;
}
示例测试用例
测试用例(通过以上代码)
**input**
0
abab
**output**
3
测试用例(上述代码失败)
**input**
3
hjdiaceidjafcchdhjacdjjhadjigfhgchadjjjbhcdgffibeh
**expected output**
4034
**my output**
4335
最佳答案
你有两个错误。首先,
for(r=1;r<len;r++)
应该是
for(r=1;r<=len-j;r++)
否则,
str[j+r]
会在某个时候开始比较空终止符之后的字符(即超出字符串末尾)。最大的 r
可以是从第 j
索引到最后一个字符的剩余字符数。
二、写作
str[i+r]
和
str[j+r]
跳过第 i
和 j
个字符的比较,因为 r
总是至少 1
。你应该写
for(r=0;r<len-j;r++)
关于c - 最多 K 个不匹配的子串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18227352/
我正在尝试创建一个程序,其中字符串的前三个字符重复给定次数,如下所示: foo('Chocolate', 3) # => 'ChoChoCho' foo('Abc', 3) # => 'AbcAbcA
我有以下字符串: std::string str = "Mode:AAA:val:101:id:A1"; 我想分离一个位于 "val:" 和 ":id" 之间的子字符串,这是我的方法: std::st
DNA 字符串可以是任意长度,包含 5 个字母(A、T、G、C、N)的任意组合。 压缩包含 5 个字母(A、T、G、C、N)的 DNA 字母串的有效方法是什么?不是考虑每个字母表 3 位,我们可以使用
是否有一种使用 levenstein 距离将一个特定字符串与第二个较长字符串中的任何区域进行匹配的好方法? 例子: str1='aaaaa' str2='bbbbbbaabaabbbb' if str
使用 OAuth 并使用以下函数使用我们称为“foo”(实际上是 OAuth token )的字符串加密 key public function encrypt( $text ) { // a
我是一名优秀的程序员,十分优秀!