演算法題 字元移位,不申請空間的交換

2021-08-15 16:08:49 字數 767 閱讀 9630

題目:小q最近遇到了乙個難題:把乙個字串的大寫字母放到字串的後面,各個字元的相對位置不變,且不能申請額外的空間。你能幫幫小q嗎

參考:採用異或交換,氣泡排序把小寫冒到前面,大寫冒到後面。

1. 使用異或運算

int a=2,b=4;//此時a的二進位制為『010』,b的二進位制為『100』 1

下面使用程式語言中的『^』,即異或操作符來完成異或運算,如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0。

第一次:

a = a ^ b; // a = 6 1

2與4進行異或運算,計算過程如下

010100

----

110 1

2 34 5

a被賦值為6,二進位制表示110

第二次:

b = a ^ b; 1

6與4進行異或運算,此處就將變數a原來的值賦予了變數b:

110100

----

010 1

2 34 5

變數b被賦值為2,交換獲得a變數原來的值

第三次:

a = a ^ b; 1

2 36與2進行異或運算,變數a交換獲得原來變數b的值,完成

110010

----

100 1

2 34 5

2. 使用加法運算

加法更加容易

int a=3,b=6;

a = a + b;

b = a - b;

a = a - b;

不申請新的空間,字串反轉

申請了 乙個變數儲存串的長度 一般面試這個程式就可以了,能寫出這個其實已經很牛 b 了,整上面那個,估計別人開始懷疑是以前做過這個題目了,呵呵,還得裝傻點 圖示過程 字串 abcdef s 1 str abcdef 0 abcdef 0 fbcdea 0 fbcde 0 a s 1 str bcde...

不申請變數和空間反轉字串

要求 不申請變數和空間 反轉字串 用乙個函式實現。異或 交換或者加減交換的典型應用!via 筆試題 基本思路 從 兩頭往中間做字元交換 字串最後乙個字元是 0 表示結束,沒有實際意義,可以將它 當作中間變數 等處理完成後,再將最後乙個字元置 0 即可 void reverse char s if s...

演算法題 字串的排列

給定兩個字串 s1 和 s2,寫乙個函式來判斷 s2 是否包含 s1 的排列。換句話說,第乙個字串的排列之一是第二個字串的子串。示例1 輸入 s1 ab s2 eidbaooo 輸出 true 解釋 s2 包含 s1 的排列之一 ba 示例2 輸入 s1 ab s2 eidboaoo 輸出 fals...