如果兩個字串中的字元一樣,出現的次數也一樣,只是出現的順序不一樣,則可以認為這兩個字串是兄弟字串。例如,「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...