zoukankan      html  css  js  c++  java
  • 华为笔试题--最长公共子串

    题目描述

    查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。

    输入描述:

    输入两个字符串

    输出描述:

    返回重复出现的字符

    输入

    abcdefghijklmnop
    abcsafjklmnopqrstuvw

    输出

    jklmnop

    #include <iostream>
    #include <vector>
    #include <string>
    #include <algorithm>
    using namespace std;
    //最长公共子串
    class Solution {
    public:
        int longestSubstring(string x, string y) {
            if (x.size() > y.size()) swap(x, y); // 较短串中最先出现的那个
            vector<vector<int> > f(x.size() + 1, vector<int>(y.size() + 1));
            int max = 0, pos = 0;
            
            for (int i = 1; i <= x.size(); i++) {
                for (int j = 1; j <= y.size(); j++) {
                    if (x[i - 1] != y[j - 1]) f[i][j] = 0;
                    else f[i][j] = f[i - 1][j - 1] + 1;
                    if (max < f[i][j]) {
                        max = f[i][j];
                        pos = i;
                    }
                }
            }
            cout << x.substr(pos - max, max) << endl;
            return max;
        }
    };
    
    int main()
    {
        string x, y;
        while (cin >> x >> y) {
            Solution().longestSubstring(x, y);
        }
        return 0;
    }
  • 相关阅读:
    For each db / table
    转---网络上来的,做一个数组样的结构
    JAVA 相关资料
    转--也不知是哪位大侠写的了
    T-SQL切割字符串方法小结 2
    OPENQUERY
    行集函数专题
    行列转换
    第一章 SQL基础
    解释型语言与编译型语言的区别
  • 原文地址:https://www.cnblogs.com/joker1937/p/10684986.html
Copyright © 2011-2022 走看看