用 C++ 分解回文

c++server side programmingprogramming

假设我们有一个回文字符串 palindrome,我们必须用任意小写英文字母替换一个字符,使该字符串成为字典顺序最小的非回文字符串。现在,在完成此操作后,我们必须找到最终的字符串。如果没有办法找到,则返回空字符串。因此,如果输入为"abccba",则输出为"aaccba"。

为了解决这个问题,我们将遵循以下步骤 −

  • changed := false

  • 如果字符串的大小为 1,则返回一个空白字符串

  • i := 0 且 j := s 的长度 – 1

  • leftA := True 且 rightA := True

  • 当 i < j −时

    • 如果 s[i] 不是 ‘a’,则将 s[i] 设置为 ‘a’ 并返回 s

    • 将 i 增加 1 并将 j 减少 1

  • s[s 的大小 - 1] := ‘b’

  • return s

示例 (C++)

让我们看下面的实现,以便更好地理解 −

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   string breakPalindrome(string s) {
      bool changed = false;
      if(s.size() == 1)return "";
      int i = 0, j = s.size() - 1;
      bool leftA = true;
      bool rightA= true;
      while(i < j){
         if(s[i] != 'a'){
            s[i] = 'a';
            return s;
         }
         i++;
         j--;
      }
      s[s.size() - 1] = 'b';
      return s;
   }
};
main(){
   Solution ob;
   cout << (ob.breakPalindrome("abccba"));
}

输入

"abccba"

输出

aaccba

相关文章