游戏海报

题目描述

小明有26种游戏海报,用小写字母"a"到"z"表示。小明会把游戏海报装订成册(可能有重复的海报),册子可以用一个字符串来表示,每个字符就表示对应的海报,例如abcdea。小明现在想做一些“特别版”,然后卖掉。特别版就是会从所有海报(26种)中随机选一张,加入到册子的任意一个位置。

那现在小明手里已经有一种海报册子,再插入一张新的海报后,他一共可以组成多少不同的海报册子呢?

输入描述:

海报册子的字符串表示,1 <= 字符串长度<= 20

输出描述:

一个整数,表示可以组成的不同的海报册子种类数

示例1

输入

a

输出

51

说明 

我们可以组成 'ab','ac',...,'az','ba','ca',...,'za' 还有 'aa', 一共 51 种不同的海报册子。
  •  暴力解法

利用C++的STL的set集合的唯一性质可以暴力解决该题,首先先构造出所有情况的字符串,全部放入set中,最后输出大小即可

/*
 * @Descripttion: 
 * @version: 
 * @Author: iDestro
 * @Date: 2020-03-08 20:33:59
 * @LastEditors: iDestro
 * @LastEditTime: 2020-03-13 22:28:20
 */

#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;
int main() {
    string str, str_temp = "0";
    cin >> str;
    unordered_set<string> s;
    for (char c = 'a'; c <= 'z'; c++) {
        str_temp[0] = c;
        for (int i = 0; i <= str.length(); i++) {
            string temp = str;
            temp.insert(i, str_temp);
            s.insert(temp);
        }
    }
    cout << s.size();
    return 0;
}

 

  • 排列组合

根据高中学的插空法,例如ab,有三个位置可以插入,即字符串的长度加1,每个位置可插入26中字母,且当插入与左边或右边字符相同时,会产生重复,如插入a至a的两边,会有一个重复,即ab有两个重复,根据推论可写出

/*
 * @Descripttion: 
 * @version: 
 * @Author: iDestro
 * @Date: 2020-03-13 22:37:42
 * @LastEditors: iDestro
 * @LastEditTime: 2020-03-13 22:46:31
 */
#include <iostream>
using namespace std;

int main() {
    string str;
    cin >> str;
    cout << (str.length()+1)*26-str.length();
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值