給定兩個字串 s1 和 s2,寫乙個函式來判斷 s2 是否包含 s1 的排列。
換句話說,第乙個字串的排列之一是第二個字串的子串。
示例1:
輸入: s1 = "ab" s2 = "eidbaooo"
輸出: true
解釋: s2 包含 s1 的排列之一 ("ba").
示例2:
輸入: s1= "ab" s2 = "eidboaoo"
輸出: false
注意:輸入的字串只包含小寫字母
兩個字串的長度都在 [1, 10,000] 之間
乙個字串s的排列指s的每個字元出現都相等,可以用雜湊表來儲存s每個字元的次數,又由於只包含小寫字母,可考慮用乙個長度26的陣列替代雜湊表。
然後可以用乙個s長度的區間依次遍歷,檢查該區間是否每個字元頻次都與s相等。
class solution
for (int i = 0, j = 0;j < s2.size();)
}if (yes) return true;
tmp_count[s2[i]-'a']--;
++i;
}++j;
}return false;
}};
複雜度
時間複雜度:o(26n)
空間複雜度:o(1)
演算法題 字串的全排列
問題 編寫乙個函式,用它把字串中所有的字元的各種排列形式全部顯示出來,即用給定字元做全排列。如 比如給定字串 hat 函式輸出全排列 tha,aht,tah,ath,hta,hat.演算法如下 void dopermute char in,char out,int used,int length,i...
OJ題 字串的排列 全排列問題
題目描述 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則按字典序列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。解法一 c 中本身有全排列的函式 next permutation 標頭檔案函式原型 bool next permu...
演算法題 字串旋轉
對於乙個字串,和字串中的某一位置,請設計乙個演算法,將包括i位置在內的左側部分移動到右邊,將右側部分移動到左邊。給定字串a和它的長度n以及特定位置p,請返回旋轉後的結果。測試樣例 abcdefgh 8,4 返回 fghabcde 正常解法 1.用 按特定位置訪問逐字元拷貝 class stringr...