Xâu đối xứng (Palindrom)

View as PDF

Submit solution


Points: 100 (partial)
Time limit: 1.0s
Memory limit: 640M
Input: stdin
Output: stdout

Authors:
Problem types

Cho một xâu kí tự, hãy kiểm tra tính đối xứng của nó. Một xâu kí tự được gọi là xâu đối xứng nếu ta đọc xâu này từ trái sang phải hoặc từ phải sang trái là như nhau.

Dữ liệu vào:

  • Chứa xâu kí tự \(S\) (Độ dài của xâu \(S \leq 255\))

Kết quả:

  • In ra YES nếu \(S\) là xâu kí tự đối xứng, ngược lại in ra NO.

Ví dụ

Input

abccba

Output

YES

Input

abcccc

Output

NO

View comments (7)

Comments


  • 0
    tkvinhtruongquang  commented on 1:36 p.m. 17 sep, 2021 edited

    bài này bộ test khá dở :v, làm như thế này mà ccx được 100 điểm thì thôi :v int main(){ string S,check; getline(cin,S); for(int i=1;i<=S.size();i++){ if(S[i-1]==S[S.size()-i]) check="YES"; else check="NO"; } cout<<check; }(anh em đừng chép code này , nó đúng ở đây ,nhưng sai ở chỗ khác, cách tốt nhất là tự suy nghĩ đê :v) lí do code này đúng là vì bộ test này luôn có phần tử đầu và phần tử cuối khác nhau, chẳng hạn như là ababab, có a và b khác nhau nên nó in ra là no nên đúng, nhưng nếu đổi thành baabab thì nó sẽ in ra Yes


    • 0
      dang7rickroll  commented on 2:22 p.m. 17 sep, 2021

      có gì anh trai bấm vào nút "Báo cáo" ở phía dưới bài tập để admin chỉnh sửa test nhé :D


  • 2
    dang7rickroll  commented on 4:22 p.m. 29 aug, 2021
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    int main()
    {
        string s;
        cin >> s;
    
        for (int l = 0, r = sz(s) - 1; l < r; l++, r--)
            if (s[l] != s[r])
                return cout << "NO", 0;
    
        cout << "YES";
        return 0;
    }
    

    (Thử chức năng thôi nha, AE đừng downvote :D)


  • 2
    SPyofgame  commented on 2:34 a.m. 19 jun, 2020

    Spoiler Alert


    Approach 1

    Tạo một xâu t là đảo ngược của xâu s.

    isPalindrome(s) = true <=> s = t


    Reference AC code | O(n) time | O(n) auxiliary space | string
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    int main()
    {
        string s;
        cin >> s;
    
        string t = s;
        reverse(t.begin(), t.end());
    
        cout << (s == t ? "YES" : "NO");    
    }
    
    Approach 2

    Chạy i từ 1 -> n / 2, nếu vị trí đối xứng của i có giá trị khác nhau thì isPalindrome(s) = false


    Reference AC code | O(n) time | O(1) auxiliary space | string
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    int main()
    {
        string s;
        cin >> s;
    
        for (int i = 0; i < s.size() / 2; ++i)
            if (s[i] != s[s.size() - i - 1])
                return cout << "NO", 0;
    
        cout << "YES";
        return 0;
    }
    
    Approach 3

    Cho chạy 2 con trỏ (l từ đầu mảng -> cuối mảng) và (r từ cuối mảng -> đầu mảng).

    Nệu tại lr tương ứng nhau có giá trị khác nhau thì isPalindrome(s) = false


    Reference AC code | O(n) time | O(1) auxiliary space | string
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    int main()
    {
        string s;
        cin >> s;
    
        for (int l = 0, r = sz(s) - 1; l < r; l++, r--)
            if (s[l] != s[r])
                return cout << "NO", 0;
    
        cout << "YES";
        return 0;
    }
    

  • -10
    MadeInHollow  commented on 6:48 p.m. 23 apr, 2020

    This comment is hidden due to too much negative feedback. Click here to view it.


    • 0
      SPyofgame  commented on 6:30 p.m. 5 jun, 2020 edit 2

      You should put your code like this

      ```

      Code();

      ```

      And then you will have

      1
      Code();