#37867: 用vector解


qqappleop87@gmail.com (ku uk)

學校 : 不指定學校
編號 : 168221
來源 : [140.113.237.228]
最後登入時間 :
2024-01-04 10:22:16
a224. 明明愛明明 | From: [140.113.90.199] | 發表日期 : 2023-10-14 22:26

#include <iostream>
#include <string>
#include <vector>
#include <cctype>
using namespace std;

int main(){
    string str;
    while(cin>>str){
        vector<int> vec;
        string temp = str;
        str = "";
        bool re = true;
        int times = 0;
        //把字母以外東西去掉
        for(char c : temp){
            if(isalpha(c)){
               str+=c; 
            }
        }
        //將大寫字母轉成小寫
        for(int i = 0 ; i < str.length() ; i++){
            if(str[i]>=65&&str[i]<=91){
                str[i]+=32;
            }
        }
        //用vector儲存新的str字串裡各個字母代表的ASCII數字
        for(int i = 0 ; i < str.length() ; i++){
            vec.push_back((int)(str[i]));
        }
        //從第零個位置開始往後找有沒有相同數字
        //若有就a++,做完會記錄下有幾個相同的字母,並把該字母的ASCII值替換成0
        //之後遇到0就跳過不做
        //若a是奇數,因為整個字串可以出現一種奇數,所以times++
        //但times>1時代表兩種字母有奇數個,會回傳false
        for(int i = 0 ; i < str.length() ; i++){
            int a = 0;
            for(int j = 0 ; j < str.length() ; j++){
                if(vec[i]==vec[j]){
                    if(vec[i]==0){
                        break;
                    }
                    a++;
                    if(j!=i){
                        vec[j]=0;
                    }
                }
            }
            if(a%2==1){
                times++;
            }
            if(times > 1){
                re = false;
                break;
            }
        }
        if(re){
            cout << "yes !" << endl;
        }else{
            cout << "no..." << endl;
        }
        
    }
}

 
ZeroJudge Forum