携程 无线前端方向 3题全AC

表示携程的笔试估计可能通过 review 代码 刷人
结束后上代码

第一题 最长公共子串

注意题目说的是不区分大小写

int longestSubStrLength(string s1, string s2) {
    int len1 = s1.size(), len2 = s2.size(), iMax = 0;
    vector<vector<int>> dp(len1+1, vector<int>(len2+1, 0));
    for(int i=1; i<=len1; i++)
        for(int j=1; j<=len2; j++)
            // 通过 | ‘ ’  把字符都转成小写
            if((s1[i-1]|' ') == (s2[j-1]|' ')) {
                dp[i][j] = dp[i-1][j-1] + 1;
                iMax = max(iMax, dp[i][j]);
            }
    return iMax;
}

第二题 版本号比较

vector<int> getNum(string& a) {
    vector<int> res;
    int ind = -1, len = a.size(), num = 0;
    while(++ind < len) {
        if(a[ind] == '.') res.push_back(num), num = 0;
        else num = num * 10 + a[ind]-'0';
    }
    // 最后还需要再加一个
    res.push_back(num);
    return res;
}

bool getRes(vector<int>& arr, vector<int>& brr) {
    int len1 = arr.size(), len2 = brr.size(), ind = -1;
    while(++ind < min(len1, len2)) {
        if(arr[ind] < brr[ind]) return true;
        if(arr[ind] > brr[ind]) return false;
    }
    return len1 <= len2;
}

string sortVersion(string s1, string s2) {
    vector<int> arr = getNum(s1);
    vector<int> brr = getNum(s2);
    bool flag = getRes(arr, brr);
    string res = flag ? s1 + "," + s2 : s2 + "," + s1;
    return res;
}

第三题 乘积最大子序列

#include <iostream>
#include <vector>

using namespace std;

vector<int> getNum(string& a) {
    vector<int> res;
    int ind = -1, len = a.size(), num = 0;
    bool flag = true;
    while(++ind < len) {
        if(a[ind] == '-') flag = false;
        else if(a[ind] == ' ') 
            res.push_back(flag ? num : -num), flag = true, num = 0;
        else num = num * 10 + a[ind]-'0';
    }
    // 最后这个也要判断符号
    res.push_back(flag ? num : -num);
    return res;
}

int main() {
    string s;
    getline(cin, s);

    vector<int> arr = getNum(s);
    int iMax = arr[0], iMin = arr[0], res = arr[0];
    for(int i=1; i<arr.size(); i++) {
        if(arr[i] >= 0) {
            iMax = max(iMax * arr[i], arr[i]);
            iMin = min(iMin * arr[i], arr[i]);
        }else {
            int tem = iMax;
            iMax = max(iMin * arr[i], arr[i]);
            iMin = min(tem * arr[i], arr[i]);
        }
        res = max(res, iMax);
    }
    cout << res << endl;
    return 0;

}
#携程##笔试题目#
全部评论
第一次体验到全AC的感觉😂
点赞 回复 分享
发布于 2019-09-04 20:28
老哥,为啥我三题全是83,百思不得解啊
点赞 回复 分享
发布于 2019-09-04 20:15
是的。。。这个题简单到怀疑自己
点赞 回复 分享
发布于 2019-09-04 20:21
挺简单
点赞 回复 分享
发布于 2019-09-04 20:22
无线前端和开发方向是一样的吗 链表 括号 任务调度
点赞 回复 分享
发布于 2019-09-04 20:33
楼主之前投的也是无线前端方向吗
点赞 回复 分享
发布于 2019-09-04 20:34
老哥71%怎莫搞
点赞 回复 分享
发布于 2019-09-04 20:43
昨天的VIPkid和今晚的携程确实简单。。。
点赞 回复 分享
发布于 2019-09-04 20:44
今晚这题确实人文关怀😂
点赞 回复 分享
发布于 2019-09-04 20:51
太简单了
点赞 回复 分享
发布于 2019-09-04 21:02
第一题最长公共字串只有 83%,我太难了
点赞 回复 分享
发布于 2019-09-04 21:08
话说第一题要判断大小写?我都没注意
点赞 回复 分享
发布于 2019-09-04 21:10
我判断了大小写也是83%
点赞 回复 分享
发布于 2019-09-04 21:12

相关推荐

小覃1:硕士了还投助理岗位吗,一般不都直接干工程师了吗
点赞 评论 收藏
分享
评论
1
5
分享

创作者周榜

更多
牛客网
牛客企业服务