zoukankan      html  css  js  c++  java
  • HackerRank

    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;
        }
    }
  • 相关阅读:
    MATLAB 显示精度 用法设置以及实例
    matlab MCR路径
    fmincon如何使非线性约束函数写成匿名函数的形式
    Matlab强行终止程序执行
    Matlab绘制图像后在指定点绘制坐标线以及标注变量
    c#各种变量的总结
    Matlab绘制图像及图像的处理
    MATLAB 嵌套函数,子函数,私有函数,重载函数
    Matlab 接受字符串并转为符号表达式,inline函数,匿名函数形式的方法汇总
    MATLAB 函数编写方法, 浅析MATLAB中的内联函数、匿名函数和函数函数
  • 原文地址:https://www.cnblogs.com/Dup4/p/9433367.html
Copyright © 2011-2022 走看看