卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章19200本站已运行343

检查字符串中的所有字符是否可以通过增加或减少来使其相等

检查字符串中的所有字符是否可以通过增加或减少来使其相等

在这个问题中,我们需要检查是否可以通过增加和减少操作使字符串的所有字符相等。我们可以根据字符的ASCII值得到每个字符的权重,并检查总权重是否可以用来使所有字符相等。

问题陈述 – 我们给出了长度为 N 的字符串 str,其中包含小写字母字符。我们需要检查是否可以通过选择两个字符中的任意一个,增加一个字符,然后将另一个字符减 1 来使字符串中的所有字符相等。如果可能,则打印“yes”,否则打印“no”。

示例示例

输入– str = ‘aedb

输出-str = ‘aedb

解释 - ‘a’ 可以增加 2,‘e’ 可以减少 2。同时,‘b’ 可以增加 1,‘d’ 可以增加 1。因此,结果字符串可以是 ‘cccc’。

输入– str = ‘abd’

输出-“否”

Explanation – 我们无法通过增加和减少操作使字符串的所有字符相等

输入-‘g’

输出 - ‘是’

解释 – 字符串仅包含单个字符,因此所有字符串字符已经相等

方法一

在这种方法中,我们将计算字符串的字符总权重。字符的权重定义为‘a’= 1,‘b’= 2,‘c’= 3,…,‘z’= 26。因此,如果我们将总权重除以字符串的长度,我们可以说通过增加一个字符并减少另一个字符,我们可以使字符串的所有字符都相等。

算法

  • 定义“len”变量并使用 size() 方法存储字符串的大小。

  • 定义“totalWeight”变量来存储给定字符串的所有字符的总权重​​

  • 使用每个字符的ASCII代码获取特定字符的权重,并将其添加到“totalWeight”变量中。

  • 如果“totalWeight”的值可以被“len”整除,则返回 true。否则,返回 false。

示例

'
#include <iostream>
using namespace std;

// function to check if all characters of a string can be made equal by incrementing or decrementing by 1
bool canMakeEqual(string str){
   int len = str.size();
   // store sum of ASCII values of characters
   int totalWeight = 0;
   // Iterate over the string
   for (int i = 0; i < len; i++){
      // get the ASCII value of each character
      totalWeight += str[i] - 'a' + 1;
   }
   return (totalWeight % len == 0);
}
int main(){
   string str = "aedb";
   if (canMakeEqual(str))
      cout << "Yes";
   else
      cout << "No";
   return 0;
}

输出

'
Yes

时间复杂度 - O(N),因为我们遍历字符串。

空间复杂度 - O(1),因为我们使用常量空间。

结论

我们学会了通过增加和减少字符的ASCII值来检查字符串的所有字符是否可以相等。我们根据“总权重”来解决这个问题。用户也可以尝试找到结果字符串。要找到结果字符串,找到与(totalWeight / len)相对应的ASCII值,并在给定的字符串中添加“len”个字符。

卓越飞翔博客
上一篇: 深化理解:PHP 异步 HTTP 下载多个文件的开发原理和逻辑
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏