HackerRank - string-reduction【反推】

题意

给出一串 只有 字母 a, b, c 组成的字符串,然后没两个不同的字符碰到一起都可以变成另外一个字符,然后变到最后,求最短的字符串长度。

思路

①如果给出的字符串都是相同的字符,那么显然,答案就是这个字符串的长度

②如果不是 那么答案 可能是1 或者是 2

③我们可以反着推回去。就是假如 刚开始的状态的1

我们可以先假定 x = 字符a的数量 y = 字符b的数量 z = 字符c的数量

如果某个字符串 是由 1 推过去的

那么刚开始 x, y, z的数量就是 (1, 0, 0) || (0, 1, 0) || (0, 0, 1)

其奇偶状态就是 奇,偶,偶,

如果一个字符变成连个字符

其奇偶状态就变为 偶,奇,奇

如果继续变

其奇偶状态就变为 奇,偶,偶

所以 如果答案是1 那么 奇偶状态就是 两奇一偶 或者 一奇两偶

如果某个字符串是由 2 推过去的

刚开始的奇偶状态是 偶,偶,偶

如果减少一个字符,加另外两个字符

其奇偶状态就变成 奇,奇,奇

所以 我们可以得出,如果 一个字符串的奇偶状态是

全奇 或者 全偶

那么最后的答案 就是2

如果是其他情况

最后的答案 就是1

AC代码

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <cstdlib>
#include <ctype.h>
#include <numeric>
#include <sstream>
using namespace std; typedef long long LL;
const double PI = 3.14159265358979323846264338327;
const double E = 2.718281828459;
const double eps = 1e-6;
const int MAXN = 0x3f3f3f3f;
const int MINN = 0xc0c0c0c0;
const int maxn = 1e5 + 5;
const int MOD = 1e9 + 7; int main()
{
int t;
cin >> t;
while (t--)
{
string s;
cin >> s;
int n[3] = {0};
int len = s.size();
for (int i = 0; i < len; i++)
{
n[s[i] - 'a'] ++;
}
if (n[0] == len || n[1] == len || n[2] == len)
{
cout << len << endl;
}
else if((n[0] % 2 == 1 && n[1] % 2 == 1 && n[2] % 2 == 1) || (n[0] % 2 == 0 && n[1] % 2 == 0 && n[2] % 2 == 0))
cout << 2 << endl;
else
cout << 1 << endl;
}
}

最新文章

  1. 十二种获取Spring的上下文环境ApplicationContext的方法
  2. shell的一些应用场景
  3. querystring 解析url 查询字符串
  4. 硬盘安装win2003
  5. mac 找文件
  6. UVA 575 Skew Binary (水)
  7. JavaScript学习总结二(Date对象的用法)
  8. HDOJ/HDU 1087 Super Jumping! Jumping! Jumping!(经典DP~)
  9. c#中设置按钮Button为透明
  10. 【stm32】ADC的规则通道和注入通道混合使用
  11. Winform程序
  12. android 复制、粘贴文字
  13. Cf #353 D. Tree Construction
  14. 痞子衡嵌入式:忘掉cmd.exe吧!选用优雅的控制台终端(ConsoleZ)
  15. 创建一个C++制作的包含Opencv功能的dll,供C#程序使用
  16. 支付宝调用错误:Call to undefined function openssl_sign()
  17. Linux基础三:linux目录结构和目录文件的浏览、管理及维护
  18. 两台linux服务器各有两个不同的用户 其中一个服务器可以无密码登录服务器
  19. Code First 重复外键(简单方法)
  20. 【转载】 大龄码农那些事——也谈996.ICU

热门文章

  1. 破解idea注册码
  2. win7(64位)+vs2008配置Directshow
  3. asp.net调用系统设置字体文本框的方法
  4. Node.js模块 require和 exports
  5. 在odl中怎样实现rpc
  6. 五月的仓颉大神写的 三年java程序员面试感悟 值得分享给大家
  7. mysql5.7 安装版安装
  8. [LintCode] 二叉树的后序遍历
  9. [Algorithms] Longest Increasing Subsequence
  10. bootstrap3.3.6 CDN