字符串刪除問題

在計算機的世界裏,字符串問題可以說是一個很重要的問題,比如文本處理等等問題。今天Mayuyu就來講述一個字符串刪除問題,問題描述如下

 

問題:給定一個很長的字符串,比如長度爲1000000,現在要刪除這個字符串中某些指定的字符,這些指定的字符只

     有幾個,現在Mayuyu要求是儘量用最少的時間和空間來做這件事。

 

 

分析:很明顯,可以從前往後掃描,遇到一個指定的字符就刪除,然後把後面的往前移動。很顯然,這樣做時間複雜度

     太大啊,所以很有必要設計一個比較好的算法。其實可以這樣考慮,我們可以用兩個指針從前往後掃描,遇到需

     要刪除的就將後面的字符串拿來覆蓋之前的,這樣下去時間複雜度是O(n)的,而且不需要開額外空間。至於怎

     麼找指定的字符是否存在,只需要先用一個數組預處理即可。

 

 

代碼:

#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;

int flag[123];  //大寫字母和小寫字母的ASCII值最多到122

void Init(const char *str)
{
	memset(flag, 0, sizeof(flag));
	while(*str)
		flag[*str++] = 1;
}

void Delete(char *str)
{
	char *pFast = str;
	char *pSlow = str;
	while(*pFast)
	{
		if(!flag[*pFast])
			*pSlow++ = *pFast++;
		else
			pFast++;
	}
	*pSlow = 0;
}

int main()
{
	char source[] = "Hello Mayuyu!!!";
	char word[] = "Hello";
	Init(word);
	Delete(source);
	cout << source << endl;
	return 0;
}


 

 

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