京东测开笔试题

1. 给定一个字符串s, 请计算输出含有连续两个s作为子串的最短字符串。 注意两个s可能有重叠部分。例如,"ababa"含有两个"aba".

输入描述 :

输入包括一个字符串s,字符串长度length(1 ≤ length ≤ 50),s中每个字符都是小写字母.

输出描述:

输出一个字符串,即含有连续两个s作为子串的最短字符串。

输入例子1:

abracadabra

输出例子2:

abracadabracadabra

代码实现:

#include
#include
using namespace std;

int main(){
    string s;
    cin >> s;
    int i=0,j=1;
    int len = s.size();
    while(j=len)
                break;
            else
                i = 0;
        }
    }
    string s2 = s.substr(i);
    cout<< s << s2 <

2.括号匹配方案

合法的括号匹配序列被定义为:
1. 空串""是合法的括号序列
2. 如果"X"和"Y"是合法的序列,那么"XY"也是一个合法的括号序列
3. 如果"X"是一个合法的序列,那么"(X)"也是一个合法的括号序列
4. 每个合法的括号序列都可以由上面的规则生成
例如"", "()", "()()()", "(()())", "(((())))"都是合法的。 东东现在有一个合法的括号序列s,一次移除操作分为两步:
1. 移除序列s中第一个左括号
2. 移除序列s中任意一个右括号.保证操作之后s还是一个合法的括号序列
东东现在想知道使用上述的移除操作有多少种方案可以把序列s变为空
如果两个方案中有一次移除操作移除的是不同的右括号就认为是不同的方案。
例如: s = "()()()()()",输出1, 因为每次都只能选择被移除的左括号所相邻的右括号.
s = "(((())))",输出24, 第一次有4种情况, 第二次有3种情况, ... ,依次类推, 4 * 3 * 2 * 1 = 24

输入描述:

输入包括一行,一个合法的括号序列s,序列长度length(2 ≤ length ≤ 20).

输出描述:

输出一个整数,表示方案数

输入例子1:

(((())))

输出例子1:

24

代码实现:

#include
#include
#include
using namespace std;

int main(){
    string input;
    cin>>input;
    stack in;
    int output=1;
    int len = input.size();
    for(int i=0;i

 

你可能感兴趣的:(刷题)