002字串包含

2021-06-22 12:05:44 字數 1445 閱讀 9196

2014.6.17

題目描述:

給定兩個分別由字母組成的字串a和字串b,字串b的長度比字串a短。請問,如何最快地判斷字串b中所有字母是否都在字串a裡?

為了簡單起見,我們規定輸入的字串只包含大寫英文本母,請實現函式bool stringcontains(string &a, string &b)

比如,如果是下面兩個字串:

string 1:abcd

string 2:bad

答案是true,即string2裡的字母在string1裡也都有,或者說string2是string1的真子集。

如果是下面兩個字串:

string 1:abcd

string 2:bce

答案是false,因為字串string2裡的e字母不在字串string1裡。

同時,如果string1:abcd,string 2:aa,同樣返回true。

方案一:

暴力法——將string2中的每個字元與string1中的進行比較,如果所有的都能匹配則true,否則false。

方案二:

先排序後匹配——排序可以用快排《時間複雜度為o(nlongn)>,將排好序的兩個字串進行線性匹配,時間複雜度是o(n+m),因此整體時間複雜度是o(nlongn)+o(mlongm)+o(n+m)。

int partition(string &str,int start, int end)

return true;

}

或者排序利用計數排序,然後進行線性匹配

計數排序就是首先掃瞄一遍陣列,將每個元素的排序順序編號儲存起來,然後將確定將各個元素填到相應的位置時間複雜度o(n+m)+o(n+m)=o(n+m),空間複雜度為o(n+m)

void countsort(string str,string &help_str)

; for(int i=0;i=0;k--)

cout<<"sortarry: "<=n1 || str1[s1]>str2[s2])

return false;

} return true;

}

方案三:hash表,時間複雜度o(n+m),段字串存入hash表,然後用長字串的元素進行查詢,找到繼續,否則為false。

方案四:利用輔助整型陣列初始為0,由26個元素構成,首先遍歷short_str將其擁有的字元對應的輔助陣列元素加1,遍歷long_str,將輔助陣列中對應的元素減1,最後判斷輔助陣列的元素值,如果有正值,則false,否則為true。時間和空間複雜度都是o(n+m)。

方案五:利用素數的不可分性,將每個字母與乙個素數唯一對應,對於long_sr中的每個元素,找到其對應的素數,然後相乘,形成乙個大的整數,然後用這個整數去除short_str中的元素對應的素數,如果有餘數則為false,除到最後都可整除則為true。

python002 字串內建函式

str python string function 生成字串變數str python string function 字串長度獲取 len str 例 print s length d str,len str 字母處理 全部大寫 str.upper 全部小寫 str.lower 大小寫互換 str...

19 字串移位包含問題

總時間限制 1000ms 記憶體限制 65536kb 描述對於乙個字串來說,定義一次迴圈移位操作為 將字串的第乙個字元移動到末尾形成新的字串。給定兩個字串s1和s2,要求判定其中乙個字串是否是另一字串通過若干次迴圈移位後的新字串的子串。例如cdaa是由aabcd兩次移位後產生的新串bcdaa的子串,...

NOIP學習之字串 134 字串移位包含問題

測試鏈結 總時間限制 1000ms 記憶體限制 65536kb 描述 對於乙個字串來說,定義一次迴圈移位操作為 將字串的第乙個字元移動到末尾形成新的字串。給定兩個字串s1和s2,要求判定其中乙個字串是否是另一字串通過若干次迴圈移位後的新字串的子串。例如cdaa是由aabcd兩次移位後產生的新串bcd...