Twosigma在线笔试 substring

本文介绍了Twosigma在线笔试中的一道难题,要求找出以元音字母开头并以辅音字母结尾的子串,字典序最大和最小的串。文章讨论了题意、思路,并提出了暴力求解和使用后缀数组的方法,时间复杂度为O(nlogn)。
摘要由CSDN通过智能技术生成

题意

给你一个字符串,让你找出这个字符串以元音字母开头(a,e,i,o,u),辅音字母结尾的所有子串,中的字典序最大串和最小串。

思路

虽然是面试题,但是我觉得这是我见过的最难的面试题

暴力解

#include<iostream>
#include<unordered_set>
#include<string>

using namespace std;



int main(int argc, char const *argv[])
{
   
    unordered_set<char> st;
    st.insert('a');
    st.insert('e');
    st.insert('i');
    st.insert('o');
    st.insert('u');

    string minString = "", maxString = "";
    int index[2] = {
   -1, -1};
    string s = "abcdeuudeaeauuzaaa";
    for(int i = s.length() - 1; i >= 0; i--) 
    {
   
        if(st.count(s[i]) == 0) 
        {
   
            if(index[0] == -1)
                index[1] = i;
            index[0] = i;
        } 
        else 
        {
   
            if(index[0] == -1)
                continue;
            string a = s.substr(i, index[0] + 1 - i);
            string b = s.substr(i, index[1] + 1 - i);
            if(minString.length() == 0) 
            {
   
                minString = a;
                maxString = b;
            } 
            else 
            
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值