55、比較字串
阿新 • • 發佈:2018-11-11
題目要求:
比較兩個字串A和B,確定A中是否包含B中所有的字元。字串A和B中的字元都是 大寫字母
樣例
給出 A = "ABCD" B = "ACD",返回 true
給出 A = "ABCD" B = "AABC", 返回 false
注意事項
在 A 中出現的 B 字串裡的字元不需要連續或者有序。
程式碼實現:
class Solution { public: /** * @param A: A string * @param B: A string * @return: if string A contains all of the characters in B return true else return false */ bool compareStrings(string &A, string &B) { int num = B.size(); for(int j=0;j<B.size();j++) { for(int i=0;i<A.size();i++) { if(B[j] == A[i] ) { A[i] = 1; //查詢且匹配的陣列元素,用其他值替換,這樣可以防止陣列中出現相同字母查詢時出錯 num--; break; //一旦滿足滿足條件,跳出最近一層的迴圈 } } } if(num == 0) { return true; } else { return false; } } };
設計思路:
對於B中的每一個元素,首先選取位置0處的元素,在A中查詢是否與之相等的元素。
若有,將A對應位置上的元素賦值位1進行覆蓋,num--,同時跳出最近的迴圈;
若沒有,則繼續 j++ ,繼續迴圈。
最後判斷num是否等於0(如果全都匹配上了,則num--最後會減到0).
上述方法可以AC。
參考答案:
class Solution { public: /** * @param A: A string includes Upper Case letters * @param B: A string includes Upper Case letter * @return: if string A contains all of the characters in B return true * else return false */ bool compareStrings(string A, string B) { int count[26]; for (int i = 0; i < 26; i++) { count[i] = 0; } for (int i = 0; i < A.length(); i++) { count[A[i] - 'A'] ++; } for (int i = 0; i < B.length(); i++) { count[B[i] - 'A'] --; if (count[B[i] - 'A'] < 0) { return false; } } return true; } };