在 C++ 中破坏回文数


假设我们有一个回文字符串 palindrome,我们需要用任意小写英语字母替换其中一个字符,以便字符串成为词典顺序最小的非回文字符串。现在,经过这样的处理后,我们必须找到最终的字符串。如果没有办法这样做,则返回空字符串。因此,如果输入类似于“abccba”,则输出将是“aaccba”。

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

  • changed := false

  • 如果字符串长度为 1,则返回一个空字符串

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

  • leftA := True 并且 rightA := True

  •  while i < j −

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

    • i 增加 1,j 减少 1

  • s[s 的长度 - 1] := ‘b’

  • 返回 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

更新时间: 29-4-2020

2 千 + 次浏览

开启你的职业生涯

完成课程认证

开始
广告