昨天去去哪儿笔试,碰到了一个我们一直很熟悉的命令(diff——ubuntu下面),可以比较字符串,即根据最长公共子串问题,如果A中有B中没有的字符输出形式如下(-ch),如果A中没有,B中有可以输出如下形式(+ch).

#include <iostream>
#include <cstring>
#include <vector>
using namespace std; string LCS(string &s1, string &s2)
{
int row = s1.size();
int col = s2.size();
string table[row + ][col + ];
char rowChar[row + ];
char colChar[col + ];
int cnt = ;
rowChar[] = colChar[] = '\0';
for(int i = row - , cnt = ; i >= ; i--, cnt++)
{
rowChar[cnt] = s1[i];
}
for(int i = col - , cnt = ; i >= ; i--, cnt++)
{
colChar[cnt] = s2[i];
}
char ch1, ch2;
string str1, str2;
for(int i = ; i <= row; i++)
{
for(int j = ; j <= col; j++)
{
ch1 = rowChar[i];
ch2 = colChar[j];
if(ch1 == ch2)
table[i][j] = ch1 + table[i - ][j - ];
else
{
str1 = table[i - ][j];
str2 = table[i][j - ];
if(str1.size() == str2.size())
table[i][j] = str1 < str2 ? str2 : str1;
else
table[i][j] = str1.size() < str2.size() ? str2 : str1;
}
}
}
return table[row][col];
}
void showDiff(string &s1, string &s2, string sub, vector<string> &ret)
{
cout << "Sub = " << sub << endl;
int len1 = s1.size();
int len2 = s1.size();
for(int i = , j = ; i < len1; i++)
{
if(s1[i] != sub[j])
{
string str;
str.push_back('-');
str.push_back(s1[i]);
ret.push_back(str);
}
else
j++;
}
for(int i = , j = ; i < len2; i++)
{
if(s2[i] != sub[j])
{
string str;
str.push_back('+');
str.push_back(s2[i]);
ret.push_back(str);
}
else
j++;
}
} int main()
{
string str1, str2;
cin >> str1 >> str2;
string retSub = LCS(str1, str2);
vector<string> ret;
showDiff(str1, str2, retSub, ret);
vector<string>::iterator iter;
for(iter = ret.begin(); iter != ret.end(); iter++)
cout << *iter << endl;
return ;
}

diff函数的实现——LCS的变种问题的更多相关文章

  1. np.diff函数

    np.diff函数 觉得有用的话,欢迎一起讨论相互学习~Follow Me 数组中a[n]-a[n-1] import numpy as np a=np.array([1, 6, 7, 8, 12]) ...

  2. SAS笔记(3) LAG和DIFF函数

    在实际的应用中,我们会想查看当前观测的上一个观测值,在上一篇博客中我们使用了RETAIN语句来记录上一条观测,其实SAS还提供了一个很好用的函数LAG.当我们使用函数时,一定要明确该函数的返回值是什么 ...

  3. pandas dataframe 时间字段 diff 函数

    pandas pandas 是数据处理的利器,非常方便进行表格数据处理,用过的人应该都很清楚,没接触的可以自行查阅pandas 官网. 需求介绍 最近在使用 pandas 的过程中碰到一个问题,需要计 ...

  4. diff函数(matlab)

    diff函数式用于求导数和差分的.无论是求导数还是差分,其原理是一样的. 这里简单介绍下其用法: 前后相邻元素之差 上下相邻行之差. 与diff(A,1,1)类似. 第三个参数为2时,则变为列差分运算 ...

  5. diff()函数的使用

    1.diff():返回略微迭代(lagged)的或滞后的不同(iterated diferences). > x<-cumsum(cumsum(1:10)) > x [1] 1 4 ...

  6. matlab的diff()函数

    diff():求差分 一阶差分 X = [1 1 2 3 5 8 13 21]; Y = diff(X) 结果: Y = 0 1 1 2 3 5 8 X = [1 1 1; 5 5 5; 25 25 ...

  7. diff()函数

    1 diff()是将原来的数据减去移动后的数据. 在numpy和pandas中都能调用. pandas的调用方法: import pandas as pd df = pd.DataFrame( {'a ...

  8. 数组单调性判断以及all和diff函数的用法

    clc;clear all;close all; n = 1 ;x = zeros(100,1);while n~= 0 n = input('请输入向量的长度n(0退出程序):'); for i = ...

  9. pandas常用函数之diff

    diff函数是用来将数据进行某种移动之后与原数据进行比较得出的差异数据,举个例子,现在有一个DataFrame类型的数据df,如下: index value1 A 0 B 1 C 2 D 3 如果执行 ...

随机推荐

  1. 2D游戏编程5—锁定频率

    核心利用win心跳函数GetTickCount利用差量锁定fps,如下代码锁定30fps,缺点为如果计算机不能以30fps运行,程序将低于30fps #define WIN32_LEAN_AND_ME ...

  2. Java Servlet 工作原理问答

    导读 本文来自stackoverflow的问答,讨论了Java Servlet的工作机制,如何进行实例化.共享变量和多线程处理. 问题:Servlet是如何工作的?Servlet 如何实例化.共享变量 ...

  3. hdoj 5461 Largest Point

    Largest Point Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tot ...

  4. Linux定时任务编写

    由于需要定时备份数据库 我就在crontab -e中编写了这样的代码 十分钟备份一次 命名方式为年月日-时分秒.sql */10 * * * * /usr/bin/mysqldump -u root ...

  5. LabSharp莱博夏普简介

    莱博夏普提供实验室信息化解决方案,为实验室提供LIMS系统建设方案咨询,并为中小型LIMS系统供应商提供系统解决方案咨询.

  6. 50个Android开发技巧(24 处理ListView数据为空的情况)

         在移动平台上为用户展示数据的一个经常用法是将数据填充进一个List内,而此时须要注意的一点就是: 原文地址:(http://blog.csdn.net/vector_yi/article/d ...

  7. Binary image

    http://www.uio.no/studier/emner/matnat/ifi/INF3300/h06/undervisningsmateriale/week-36-2006-solution. ...

  8. 用apache的httpclient发请求和接受数据

    此处发请求的是用httpclient4,请自己下载所需要的jar包. 发post请求,并得到数据. String url = "http://localhost:8080/lee" ...

  9. [Webpack 2] Polyfill Promises for Webpack 2

    If you're going to use code splitting with Webpack 2, you'll need to make sure the browser has suppo ...

  10. android79 Fragment生命周期

    切换成01时依次调用onCreate,onStart,onResume方法,切换到03的时候01依次onPause,onStop,onDestroy,03依次onCreate,onStart,onRe ...