# String Manipulation# Palindrome# Iteration

a779 - 1. Reversal of Field

🔗 前往 ZeroJudge 原題

題目描述

題目要求判斷輸入的字串是否為回文。在判斷之前,需要將字串中的大寫字母轉換為小寫字母,並忽略所有非字母和數字的字符。

解題思路

程式首先讀取輸入字串。然後,它遍歷字串,將大寫字母轉換為小寫字母,並將字母和數字字符添加到一個新的字串 b 中。接著,程式檢查 b 是否為回文。它通過比較 b 的每個字符與其對應的字符(從字串的末尾開始)來實現這一點。如果發現任何不匹配的字符,則將一個布林變數 c 設置為 true。最後,程式根據 c 的值輸出結果。

複雜度分析

  • 時間複雜度: O(n),其中 n 是輸入字串的長度。程式需要遍歷輸入字串兩次:一次用於構建過濾後的字串,另一次用於檢查回文。
  • 空間複雜度: O(n),其中 n 是輸入字串的長度。程式需要創建一個新的字串 b 來存儲過濾後的字符。

程式碼

#include <iostream>
#include <string>
using namespace std;
int main(){
	string a;
	while(getline(cin,a)){
		string b;
		bool c=0;
		for(int i=0;i<a.length();i++){
			if(a[i]<='Z'&&a[i]>='A')
				b+=(a[i]+32);
			else if((a[i]<='z'&&a[i]>='a')||(a[i]<='9'&&a[i]>='0'))
				b+=a[i];
		}
		for(int i=0;i<b.length()&&c==0;i++)
			if(b[i]!=b[b.length()-1-i])
				c=1;
		if(c==0)
			cout << a << "\n-- is a palindrome\n";
		else
			cout << a << "\n-- is not a palindrome\n";
	}
}

Discussion