a779 - 1. Reversal of Field
題目描述
題目要求判斷輸入的字串是否為回文。在判斷之前,需要將字串中的大寫字母轉換為小寫字母,並忽略所有非字母和數字的字符。
解題思路
程式首先讀取輸入字串。然後,它遍歷字串,將大寫字母轉換為小寫字母,並將字母和數字字符添加到一個新的字串 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";
}
}