CSES - Palindrome Reorder | Sắp xếp lại xâu đối xứng

Xem PDF

Điểm: 1100 (p) Thời gian: 1.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Cho một xâu, nhiệm vụ của bạn là sắp xếp lại các kí tự của nó sao cho xâu đó trở thành một xâu đối xứng. Xâu đối xứng là xâu khi đọc xuôi hoặc ngược đều như nhau.

Input

  • Một dòng duy nhất gồm một xâu độ dài \(n\) chỉ chứa các kí tự A-Z.

Output

  • In ra một xâu đối xứng chứa các kí tự của xâu ban đầu. Bạn có thể in ra bất kỳ đáp án thỏa mãn nào. Nếu không có đáp án, in NO SOLUTION.

Constraints

  • \(1 \le n \le 10^6\)

Example

Sample input

AAAACACBA

Sample output

AACABACAA


Bình luận


  • 1
    Avocadorable    2:05 p.m. 7 Tháng 6, 2024
    from collections import defaultdict
    
    
    def getPalindrome(st):
    
        # Store counts of characters
        hmap = defaultdict(int)
        for i in range(len(st)):
            hmap[st[i]] += 1
    
        # Find the number of odd elements.
        # Takes O(n)
        oddCount = 0
    
        for x in hmap:
            if (hmap[x] % 2 != 0):
                oddCount += 1
                oddChar = x
    
        # odd_cnt = 1 only if the length of
        # str is odd
        if (oddCount > 1 or oddCount == 1 and
                len(st) % 2 == 0):
            return "NO SOLUTION"
    
        # Generate first half of palindrome
        firstHalf = ""
        secondHalf = ""
    
        for x in sorted(hmap.keys()):
    
            # Build a string of floor(count/2)
            # occurrences of current character
            s = (hmap[x] // 2) * x
    
            # Attach the built string to end of
            # and begin of second half
            firstHalf = firstHalf + s
            secondHalf = s + secondHalf
    
        # Insert odd character if there
        # is any
        if (oddCount == 1):
            return (firstHalf + oddChar + secondHalf)
        else:
            return (firstHalf + secondHalf)
    
    
    # Driver code
    if __name__ == "__main__":
    
        s = input()
    
        print(getPalindrome(s))
    

    • 0
      Vodangngoclam    5:45 p.m. 7 Tháng 6, 2024

      gà:

      Delphi
      var
          a : ansistring;
          c : array[65..90] of int64;
          le , chan : int64;
          i , j : longint;
      
      BEGIN
          read(a);
          For i:=1 to length(a) do inc(c[ord(a[i])]);
          For i:=65 to 90 do
              IF (c[i] <> 0) THEN
                  IF c[i] mod 2 = 0 THEN
                      inc(chan)
                  ELSE
                      inc(le);
          IF le > 1 THEN
              write('NO SOLUTION')
          ELSE
              BEGIN
                  For i:=65 to 90 do
                      For j := 1 to c[i] div 2 do write(chr(i));
                  IF le = 1 THEN
                      For i:=65 to 90 do
                          IF c[i] mod 2 = 1 THEN
                              write(chr(i));
                  For i:=90 downto 65 do
                      For j:=1 to c[i] div 2 do write(chr(i));
              END;
          readln;
      END.
      


      • 0
        PhucDepZai    10:50 a.m. 10 Tháng 7, 2024

        cũng đúng mà , có sai đâu

      4 bình luận nữa