# String Manipulation# Palindrome# Greedy

h033 - 雜訊移除 (Noise)

🔗 前往 ZeroJudge 原題

題目描述

題目給定兩個字串 sdd 代表雜訊。目標是從 s 中移除所有在 d 中出現的字元,然後判斷剩餘的字串是否為迴文。

解題思路

解題思路是先遍歷字串 s,對於每個字元,檢查它是否在字串 d 中存在。如果不在 d 中,則將該字元添加到新的字串 a 中。最後,判斷字串 a 是否為迴文。迴文判斷使用雙指針從字串兩端向中間比較字元,如果所有字元都相同,則為迴文。

複雜度分析

  • 時間複雜度: O(n*m + k),其中 n 是字串 s 的長度,m 是字串 d 的長度,k 是字串 a 的長度。遍歷 s 需要 O(n),每次檢查 s[i] 是否在 d 中需要 O(m),迴文判斷需要 O(k)。
  • 空間複雜度: O(k),其中 k 是字串 a 的長度。

程式碼

#include <iostream>
using namespace std;
string s,d,a;
bool judge(string x){
	for(int i=0,j=x.size()-1;i<x.size();++i,--j){
		if(x[i]!=x[j])return 0;
	}
	return 1;
}
int main(){
	cin >> s >> d;
	for(int i=0;i<s.size();++i){
		bool ac=1;
		for(int j=0;j<d.size()&&ac;++j){
			if(s[i]==d[j])ac=0;
		}
		if(ac)a+=s[i];
	}
	if(judge(a)){
		cout << "Yes";
	}
	else{
		cout << "No";
	}
}

Discussion