C 判斷字串是否是子集

DoWhatIWant_comeon發表於2017-04-11
  • 題目描述
    這裡寫圖片描述

  • 分析
    該題是在leetCode“二分搜尋”類下搜到的一題難度為medium的題。從題目的意思來看,其實就是判斷子串的字元順序是否在主串中出現過,若出現過,就返回true。

    就題目的意思來說,那我們最多遍歷一次主串來挨個搜尋出子串的字元即可得出結果,很簡單明瞭的一件事兒。之所以說是medium,是從若用運用二分搜尋的思想來解該題的角度說的吧,而我到在寫下這篇部落格為止,還未能想到如何應用二分搜尋來弄。

  • 程式碼實現

bool isSubsequence(char* s, char* t) {
    int slen=strlen(s);
    int tlen=strlen(t);
    int j=0;
    for(int i=0;i<tlen;i++){
        if(s[j]==t[i]){
            j++;
            if(j==slen)
                break;
        }
    }
    if(j==slen)
        return true;
    else
        return false;
}

  • 無意中看到了一個對上述方法進行實現的簡潔程式碼(除不含break的功能外),如下
bool isSubsequence(char* s, char* t) {
    while (*t)
        s += *s == *t++;
    return !*s;
}

感想:
好簡潔,利用了判斷語句的結果true、false會在計算中自動轉化為1、0值,以及char型別的儲存空間為1個位元組的性質,當然還有字串以‘\0’結束,作為判斷時會轉成false的性質,三句程式碼就搞定了,膜!

相關文章