【劍指offer】2.3.2 字符串

面試題5:替換空格

題目:請實現一個函數,把字符串中的每個空格替換成“%20”。例如,輸入“We are happy.”,則輸出“We%20are%20happy.”。

解答:我們可以先遍歷一遍字符串,統計出字符串中空格的數目,由此計算出替換後字符串的長度。可以從字符串的末尾開始複製和替換。首先準備兩個指針p和q,p指向原始字符串的末尾,q指向替換後字符串的末尾。接下來向前移動指針p,逐個把它所指向的字符複製到q所指向的位置。在碰到空格時,把p向前移動1格,在q之前插入字符串“%20”,並把q往前移動三個位置。接着往前複製,直到p和q相遇,表明所有的空格都已替換完畢。此算法中所有的字符都只移動一次,其時間複雜度爲:O(n)。代碼如下:

void replaceSpace(char *str,int length)
{
	if(NULL == str || length < 0)
	{
		return;
	}

	int spaceNum = 0;
	int i = 0;
	for(;i < length;i++)
	{
		if(isspace(str[i]))
		{
			spaceNum++;
		}
	}

	if(0 == spaceNum)
	{
		return;
	}

	int newLength = length + 2*spaceNum;

	i = length - 1;
	int j = newLength;
	str[j--] = '\0';

	while(i >=0 && j >= 0 && spaceNum)
	{
		if(isspace(str[i]))
		{
			str[j--] = '0';
			str[j--] = '2';
			str[j--] = '%';
			i--;
			spaceNum--;
		}
		else
		{
			str[j--] = str[i--];
		}
	}
}

 

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