請實現乙個演算法,確定乙個字串的所有字元是否全都不同。這裡我們要求不允許使用額外的儲存結構。測試樣例:給定乙個
string inistring
,請返回乙個bool
值,true
代表所有字元全都不同,false
代表存在相同的字元。保證字串中的字元為ascii字元。字串的長度小於等於3000。
「aeiou」返回:true
「barackobama」
返回:false
class
different
return
true;}
};
請實現乙個演算法,在不使用額外資料結構和儲存空間的情況下,翻轉乙個給定的字串(可以使用單個過程變數)。測試樣例:給定乙個string inistring,請返回乙個string,為翻轉後的字串。保證字串的長度小於等於5000。
「this is nowcoder」返回:「redocwon si siht」
class
reverse
return inistring;}}
;
給定兩個字串,請編寫程式,確定其中乙個字串的字元重新排列後,能否變成另乙個字串。這裡規定大小寫為不同字元,且考慮字串中的空格。測試樣例:給定乙個string stringa和乙個string
stringb,請返回乙個bool,代表兩串是否重新排列後可相同。保證兩串的長度都小於等於5000。
「this is nowcoder」,「is this nowcoder」返回:true
「here you are」,「are you here」
返回:false
class
same
return
true;}
};
請編寫乙個方法,將字串中的空格全部替換為「%20」。假定該字串有足夠的空間存放新增的字元,並且知道字串的真實長度(小於等於1000),同時保證字串由大小寫的英文本母組成。測試樣例:給定乙個string inistring 為原始的串,以及串的長度 int len, 返回替換後的string。
"mr john smith」,13返回:「mr%20john%20smith」
」hello world」,12
返回:」hello%20world」
1、不使用額外的空間注意: resize()和reserve()在使用上的區別
class
replacement
int t = inistring.
size()
;// inistring.reserve(t + 2 * count);
inistring.
resize
(t +
2* count)
;for
(int i = t -
1, j = t +
2* count -
1; i >=
0&& j >=0;
--i,
--j)
else
}return inistring;}}
;
2、可以使用額外的記憶體空間
class
replacement
else
}return str;}}
;
利用字元重複出現的次數,編寫乙個方法,實現基本的字串壓縮功能。比如,字串「aabcccccaaa」經壓縮會變成「a2b1c5a3」。若壓縮後的字串沒有變短,則返回原先的字串。測試樣例給定乙個string
inistring為待壓縮的串(長度小於等於10000),保證串內字元均由大小寫英文本母組成,返回乙個string,為所求的壓縮後或未變化的串。
「aabcccccaaa」返回:「a2b1c5a3」
「welcometonowcoderrrrr」
返回:「welcometonowcoderrrrr」
注意:char和int的相互轉換
class
zipper
else
} str +
=to_string
(count)
;return str.
size()
>= inistring.
size()
? inistring : str;}}
;
有一副由nxn矩陣表示的影象,這裡每個畫素用乙個int表示,請編寫乙個演算法,在不占用額外記憶體空間的情況下(即不使用快取矩陣),將影象順時針旋轉90度。測試樣例:給定乙個nxn的矩陣,和矩陣的階數n,請返回旋轉後的nxn矩陣,保證n小於等於500,影象元素小於等於256。
[[1,2,3],[4,5,6],[7,8,9]],3返回:[[7,4,1],[8,5,2],[9,6,3]]
非常有趣的思路(沒看過想不到的):首先上下翻轉,再按照主對角線翻轉
1 2 3 —> 7 8 9 —> 7 4 1
4 5 6 —> 4 5 6 —> 8 5 2
7 8 9 —> 1 2 3 —> 9 6 3
如果是逆時針翻轉則先翻主對角線,再上下翻轉
class
transform
for(
int i =
0; i < n; i++)}
return mat;}}
;
請編寫乙個演算法,若n階方陣中某個元素為0,則將其所在的行與列清零。測試樣例:給定乙個n階方陣intmat和矩陣的階數n,請返回完成操作後的int方陣(c++中為vector>),保證n小於等於300,矩陣中的元素為int範圍內。
[[1,2,3],[0,1,2],[0,0,1]]返回:[[0,0,3],[0,0,0],[0,0,0]]
class
clearer
}while
(!que.
empty()
)for
(int k =
0; k < n;
++k)
}return mat;}}
;
程式設計師面試金典84題之每日7題 第十天
有乙個整數陣列,請編寫乙個函式,找出索引m和n,只要將m和n之間的元素排好序,整個陣列就是有序的。注意 n m應該越小越好,也就是說,找出符合條件的最短序列。給定乙個int陣列a和陣列的大小n,請返回乙個二元組,代表所求序列的起點和終點。原序列位置從0開始標號,若原序列有序,返回 0,0 保證a中元...
程式設計師面試金典 8 4
power set 編寫 列舉乙個集合的所有子集。根據公式,乙個集合一共有2 n個子集,在結果中,每個元素會出現2 n 1 次,所以總共需要對元素訪問n 2 n 1 次。為了生成n個元素的冪集,可以首先生成n 1個元素的冪集,然後將第n個元素加入到n 1個元素的冪集中的每個元素中,這樣就生成了包含第...
程式設計師面試金典
1.有個小孩正在上樓梯,樓梯有n階台階,小孩一次可以上1階 2階 3階。請實現乙個方法,計算小孩有多少種上樓的方式。為了防止溢位,請將結果mod 1000000007 給定乙個正整數intn,請返回乙個數,代表上樓的方式數。保證n小於等於100000。int countways int n retu...