字串的包含

2021-07-10 08:39:49 字數 1153 閱讀 2386

如果兩個字串中的字元一樣,出現的次數也一樣,只是出現的順序不一樣,則可以認為這兩個字串是兄弟字串。例如,「bad」和「abd」即為兄弟字串。

在書中提到的乙個檢驗是否包含的演算法是位運算演算法,可將長字串用位運算的方法計算出乙個「簽名」(58位二進位制表示,『a』ascii值為65,』z』ascii值為122,兩個字元差值屬於[0,58]),在逐一將端字串中的字元放入查詢。方法十分巧妙。

但是對於本問題涉及到每個元素出現的個數問題,無法用上述演算法實現,例如「bbc」包含於「abc」,但是二者並非是兄弟字串。可以將原來的58位二進位制「簽名」改為用長度為58的陣列表示,兩個字串出現對應的字元則在對應編號的位置++或–。

/*

字串的包含

如果兩個字串的字元一樣,出現次數也一樣,則認為這兩個字串是兄弟字串。

例如,「bad」和「abd」即為兄弟字串。現提供乙個字串,在字典中快速找到他的乙個兄弟字串

*/#include

using

namespace

std;

void findbrother(char *s1, char *s2);

bool charbrother(char* s1, char* s2, int nstart, int nend);

int main()

void findbrother(char *s1,char *s2)

start++;

}cout

<< "the number of charbrother is "

<< num << endl;

}bool charbrother(char* s1,char* s2,int nstart,int nend)

; // (int) 'z'-'a' =57

if (nstart>nend)

else

for (int i = 0; i < 2*26; i++)}}

return

true;

}

執行結果

上述方法都借鑑了hash table的思路,能比較巧妙的解決問題。

字串包含

問題 給定兩個分別由字母組成的字串a和字串b,字串b的長度比字串a短。請問,如何最快地判斷字串b中所有字母是否都在字串a裡?為了簡單起見,我們規定輸入的字串只包含大寫英文本母,請實現函式bool stringcontains string a,string b 比如,如果是下面兩個字串 string...

字串包含

給定乙個長字串a和乙個短字串b,請問,如何最快地判斷出短字串b中的所有字元是否都在長字串a中?輪詢短字串b中的每乙個字元,逐個與長字串a中的每個字元比較,看是否都在字串a中。實現 public class stringcontain return true public static void ma...

字串包含

題目描述 給定兩個分別由字母組成的字串a和字串b,字串b的長度比字串a短。請問,如何最快地判斷字串b中所有字母是否都在字串a裡?實現函式bool stringcontains string a,string b 比如,如果是下面兩個字串 string 1 abcd string 2 bad 答案是t...