Pの競プロ記

競技プログラミングに関することを書きます。

FauxPalindromes (SRM564 div2 easy)

解法・感想など


与えられた文字列に対してまず普通の回文かどうか調べます。
もし回文ではなければ、重複する文字を削除した文字列を生成し、また回文かどうか調べればよいです。

他の記事を拝見したところ、下のソースコードよりはるかに簡単に実装していたのでメモしておきます。
・回文かどうか調べる

string word;
string reverse_word = word;

reverse(reverse_word.begin(), reverse_word.end());

if(word == reverse) {}

・文字の重複を取り除く

string word;
word.erase(unique(word.begin(), word.end()), word.end());


ソースコード

class FauxPalindromes {
  public:
  string classifyIt(string word) {
    int sz = word.size();
    bool flag = true;
    
    for(int i = 0; i < sz / 2; i++){
      if(word[i] != word[sz - 1 - i]) flag = false;
    }
    
    if(flag) return "PALINDROME";

    string str = "";
    str = word[0];
    int idx = 0;
    for(int i = 0; i < sz; i++){
      if(str[idx] != word[i]){
        str += word[i];
        idx++;
      }
    }

    sz = str.size();
    flag = true;
    for(int i = 0; i < sz; i++){
      if(str[i] != str[sz - 1 - i]) flag = false;
    }
    
    if(flag) return "FAUX";
    
    return "NOT EVEN FAUX";
  }
};