題目:小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...