算法-字符串的去重

字符串去重分3種情況
1、去掉重複的字符,並且只保留一個
2、去掉重複的字符,如果有多個的保留兩個
3、去掉重複的字符,重複的一個都不保留

對應第一種情況的解法:
只需要對字符串進行遍歷,如果遍歷到重複的字符就跳過,如果遍歷到不重複的就賦值
第二種:
需要在第一種情況下加一個判斷bool變量,用於判斷是否已經加了一個。
第三種:
還是判斷當前遍歷的位置和下一個位置進行判斷,不過需要判斷兩次,因爲如果有AACB這種字符串,當遍歷到第二個A的時候下一個是C是不同的但是不知道C後面是不是還是C,所以第一次判斷爲true。下面進行第二次判斷,如果C後面不是C就證明C是僅有的一個不是重複的。

第一種

void Remove_1(char * str){
	int index = 0;
	int pos = 1;
	while(str[pos] != '\0'){
		if(str[pos] != '\0'){
			index++;
			str[index] = str[pos];	
		}
		pos++;
	}
	str[++index] = '\0';
}

測試效果
在這裏插入圖片描述

第二種

void Remove_2(char * str){
	int index = 0;
	int pos = 1;
	bool flag = false;
	while(str[pos] != '\0'){
		if(str[pos] != str[index]){
			index++;
			str[index] = pos;
			flag = true;
		}
		else{
			if(flag){
				index ++;
				str[index] = str[pos];
				flag = false;	
			}	
		}
		pos++;
	}
	str[++index] = '\0';
}

測試效果:
在這裏插入圖片描述
第三種

void Remove_3(char * str){
	int index = -1;
	int pos = 0;
	bool flag = false;
	for(pos = 0;str[pos] != '\0';pos++){
		if(str[pos] == str[pos+1]){
			flag = true;	
		}
		else{
			if(flag){
				flag = false;	
			}	
			else{
				str[++index] = str[pos];	
			}
		}
	}
	str[++index] = '\0';
}

測試效果
在這裏插入圖片描述

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