【
"ACGAATTCCG":例えば、A、C、G、およびTヌクレオチドと略記する一連の全DNA。DNAの研究では、研究におけるDNA反復配列の認識は非常に参考時々になります。
書き込み機能は、より長い(サブストリング)10の文字すべての出現におけるDNA分子の配列度も検索します。
例:
入力:S = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
出力:[ "AAAAACCCCC"、 "CCCCCAAAAA "]
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/repeated-dna-sequences
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。
】
31/32例とし、最終的にタイムアウト実施形態で処理することにより、この質問。ビットのハッシュ推定により、ビットは、ハッシュ文字列を保存しますよりも通らないこのユースケースのいくつかの最初の記録のバージョンを行う必要があります。
この質問は、単に起動することができませんでし感じるだろう確認することです。そして、ハッシュを使用することであると考えるべきで、このようなフィールドの数を見て見て。
それでは、どのハッシュキー構造との対応、それ?記録されていない場合は、1つであっカウントする場合の考え方は、文字列sに横断されます。すなわち、キーは、カウント配列を増加させるため、さらに必要等しいです。
文字列比較関数のstrcmp、文字列のコピー機能はstrncpyとのstrcpyを使用するには、この問題。
次に、アプリケーションコードの大部分は、この点はまだ我慢する必要があり、malloc関数のメモリ、C言語のブラシのタイトルです。
int count;
void Checkhash(char *temp, char **hashstr, char *countarr) {
int i;
for (i = 0; i < count; i++) {
if (!strcmp(temp, hashstr[i])) {
countarr[i] = 1; // 找到重复
return;
}
}
strcpy(hashstr[count], temp);
count++;
}
char ** findRepeatedDnaSequences(char * s, int* returnSize){
int i;
char **retarr;
int len = strlen(s);
char **hashstr;
char temp[11] = {0};
char countarr[len + 1];
int retcount = 0;
count = 0;
memset(countarr, 0, (len + 1));
hashstr = (char **)malloc(sizeof(char *) * len);
for (i = 0; i < len; i++) {
hashstr[i] = (char *)malloc(sizeof(char) * 11);
memset(hashstr[i], 0 , sizeof(char) * 11);
}
retarr = (char **)malloc(sizeof(char *) * len);
for (i = 0; i < len; i++) {
retarr[i] = (char *)malloc(sizeof(char) * 11);
}
for (i = 0; i < len - 9; i++) {
strncpy(temp, s + i, 10);
Checkhash(temp, hashstr, countarr);
}
for (i = 0 ; i < count; i++) {
if (countarr[i] > 0) {
strcpy(retarr[retcount], hashstr[i]);
retcount++;
}
}
*returnSize = retcount;
return retarr;
}