字符串

根據以下網站的文章整理:

http://developer.51cto.com/art/201207/347641.htm

問題:假設這有一個各種字母組成的字符串,假設這還有另外一個字符串,而且這個字符串裏的字母數相對少一些。從算法是講,什麼方法能最快的查出所有小字符串裏的字母在大字符串裏都有?

比如,如果是下面兩個字符串:String 1: ABCDEFGHLMNOPQRS                  String 2:DCGSRQPOM

    答案是true,所有在string2裏的字母string1也都有。

如果是下面兩個字符串:String 3: ABCDEFGHLMNOPQRS                              String 4:DCGSRQPOZ

     答案是false,因爲第二個字符串裏的Z字母不在第一個字符串裏。

【以下分析、代碼均默認第一個參數是短的字符串str1,第二個參數是長字符串str2.】

1.最最笨的辦法應該是兩個for循環。依次取str1(較短的字符串)的每個字符,順次在str2中搜尋。(代碼如下:)

bool fun_1(char *str1,char *str2)

{

char ch;

for(int i=0;i<strlen(str1);i++)

{

ch = str1[i];

for(int j=0;j<strlen(str2);j++)

{

if(ch==str2[j]) continue;

if(j==strlen(str2)) return false;

}

}

return true;}

當然,對於上面的方法可以稍加改進。對str1和str2分別進行去除重複字母的處理。這樣,上述的循環次數就會減少,相應的,會增加對兩個字符串的處理時間。(在此不再贅述)

2.對於兩個字符串進行相同的處理,對字母A - Z賦予素數1,2,3,5...

計算出str1(較長的字符串)的每個字母對應的素數乘積(不計算重複的)sum;

依次取str2(較短的)每個字母對應的素數與sum相除(重複的只計算一次),得出最終的結果爲整數,則表示返回結果應爲true,否則,爲false.(代碼略)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章