將字符串中的字符'*'移到串的前部分 的一個解法

微軟等數據結構+算法面試100題 第88題

2005年11月金山筆試題。編碼完成下面的處理函數。
函數將字符串中的字符'*'移到串的前部分,

前面的非'*'字符後移,但不能改變非'*'字符的先後順序,函數返回串中字符'*'的數量。
如原始串爲:ab**cd**e*12,
處理後爲*****abcde12,函數並返回值爲5。(要求使用盡量少的時間和輔助空間)

 

int movStar(char * p, int n)
{
 char * q1 = p+(n-1), *q2 = p+(n-1);
 while(q1>=p)
 {
  if(*q1 != '*')
   *q2-- = *q1;
  q1--;
 }
 int nRet = q2 - q1;
 while(q2>=p)
 {
  *q2-- = '*';
 }
 return nRet;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章