1. 程式人生 > >LintCode(容易)55.比較字串

LintCode(容易)55.比較字串

需注意的點:
1.字串B中可能含有多個重複的大寫字母,則A中此大寫字母的個數至少要大於B中的個數。
目前的思路:
先把字串A中26個字母的個數統計出來,按序儲存在一個string型a裡面,B同理,儲存在string型b裡面,然後直接比較a>b,true則包含。
bug1:
這裡寫圖片描述
主要錯誤點:(一些小錯點忽略)string a 應該為string a(26,’0’);
bug2:
這裡寫圖片描述
原因是:比如A(“ABCDEFG”),B(“ACC”),則a就是(“111…”)26個1,b就是(”102000…“),就產生了判斷錯誤。
bug3:
這裡寫圖片描述
原因:這裡主要是
for (int i = 0; i < b.size(); i++){
if (b[i] == 48) b[i] = b.size();
}


中b[i] = b.size();沒有執行成功,於是我做了以下小實驗:

int main() {
    string b("10200");
    for (int i = 0; i < b.size(); i++){
        if (b[i] == '0') {
            b[i] = b.size(); cout << b[i];
        }
    }
    system("Pause");

        }

輸出結果:這裡寫圖片描述
改正:b[i] = b.size()+’0’;
bug3:
這裡寫圖片描述
bug4:
這裡寫圖片描述
bug5:
這裡寫圖片描述


這裡寫圖片描述
原因:不能超過9,超過以後按Ascii碼計算,但是後來我發現這個沒關係。
之前的思路的漏洞:
1.B有可能是空字串
2.A(“ABCDEFG”),B(“ACC”),則a就是(“111…”)26個1,b就是(”102000…“),就產生了判斷錯誤。
改正:

    for (int i = 0; i < B.size(); i++)//之前的小bug:i<b.size();
            if (b[i] == '0') b[i] = a[i];
        }

3.A(“ABCDEFG”),B(“BCC”),則a就是(“111…”)26個1,b就是(”002000…“),就產生了判斷錯誤。
所以又改動

for (int i = 0; i < B.size(); i++){
if (a[i]>b[i])a[i] = b[i];
//if (b[i] == '0') b[i] = a[i];
}