#includeusing namespace std;
#define nsiz 1000
int next[nsiz];
char str1[nsiz];
char str2[nsiz];
void getnext(char str, int n)
int i = 0, j = -1;
next[i] = -1;
while(i < n)
else
}}//最壞的情況o((n/m)*(n+m))
//最好的情況o(2(n+m))
//這裡用自身做標記位,若str1[i] = 0,表示第i個字元已經匹配過
//str2[i] != 0,表示第i個字元沒有匹配過
//引數str1 表示母串,str2表示刪除的子串
//返回值表示刪除的子串在母串中的個數
int kmp(char *str1, char * str2)
int flag = 1;
int count = 0;
int n2 = strlen(str2);
int n1 = strlen(str1);
int i = 0, j = 0, k = 0;
//子串長度為1時
if (n2 == 1)
else
}str1[j] = 0;
return count;
} //若子串長度比母串長度大
if (n2 > n1)
//子串長度不為1時
getnext(str2, n2);
while(flag == 1)
else
if (j == n2)
flag = 1;
}} for (i = 0, j = 0;i < n1; ++i)
}str1[j] = 0;
} return count;
}int main()
; char str2 = ;
int num = kmp(str1, str2);
printf("num: %d, after deleted: %s\n", num,str1);
char str3 = ;
char str4 = ;
num = kmp(str3, str4);
printf("num: %d, after deleted: %s\n", num,str3);
char str5 = ;
char str6 = ;
num = kmp(str5, str6);
printf("num: %d, after deleted: %s\n", num,str5);
char str7 = ;
char str8 = ;
num = kmp(str7, str8);
printf("num: %d, after deleted: %s\n", num,str7);
char str9 = ;
char str10 = ;
num = kmp(str9, str10);
printf("num: %d, after deleted: %s\n", num,str9);
char str11 = ;
char str12 = ;
num = kmp(str11, str12);
printf("num: %d, after deleted: %s\n", num,str11);
return 0;
}
去除給定字串中重複的字串
create or replace function myreplace oldstr varchar2,sign varchar2 return varchar2 is str varchar2 4000 currentindex number startindex number endindex...
字串處理 去掉給定字串中重複的字元
例如 輸入 google 輸出 gole 思路 1 建立乙個字元陣列a來存放待處理字串 2 從a的第乙個元素開始遍歷,依次對比這個元素和它後面的每乙個元素,如果不相同則處理下乙個元素,如果相同則將後面的元素整體向前移動乙個位置 3 處理完畢的a就是沒有重複元素的字串,輸出即可 include inc...
在字串中刪除特定的字元(字串)。
題目 輸入兩個字串,從第一字串中刪除第二個字串中所有的字元。例如,輸入 they are students.和 aeiou 則刪除之後的第乙個字串變成 thy r stdnts.其實這類題有個特點,字串中的字元分為兩類,就可以聯想快速排序裡的將當前的陣列分為左右兩組,其中左邊的數字小於某值,右邊的數...