diff函数的实现——LCS的变种问题
昨天去去哪儿笔试,碰到了一个我们一直很熟悉的命令(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的变种问题的更多相关文章
- np.diff函数
np.diff函数 觉得有用的话,欢迎一起讨论相互学习~Follow Me 数组中a[n]-a[n-1] import numpy as np a=np.array([1, 6, 7, 8, 12]) ...
- SAS笔记(3) LAG和DIFF函数
在实际的应用中,我们会想查看当前观测的上一个观测值,在上一篇博客中我们使用了RETAIN语句来记录上一条观测,其实SAS还提供了一个很好用的函数LAG.当我们使用函数时,一定要明确该函数的返回值是什么 ...
- pandas dataframe 时间字段 diff 函数
pandas pandas 是数据处理的利器,非常方便进行表格数据处理,用过的人应该都很清楚,没接触的可以自行查阅pandas 官网. 需求介绍 最近在使用 pandas 的过程中碰到一个问题,需要计 ...
- diff函数(matlab)
diff函数式用于求导数和差分的.无论是求导数还是差分,其原理是一样的. 这里简单介绍下其用法: 前后相邻元素之差 上下相邻行之差. 与diff(A,1,1)类似. 第三个参数为2时,则变为列差分运算 ...
- diff()函数的使用
1.diff():返回略微迭代(lagged)的或滞后的不同(iterated diferences). > x<-cumsum(cumsum(1:10)) > x [1] 1 4 ...
- 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 ...
- diff()函数
1 diff()是将原来的数据减去移动后的数据. 在numpy和pandas中都能调用. pandas的调用方法: import pandas as pd df = pd.DataFrame( {'a ...
- 数组单调性判断以及all和diff函数的用法
clc;clear all;close all; n = 1 ;x = zeros(100,1);while n~= 0 n = input('请输入向量的长度n(0退出程序):'); for i = ...
- pandas常用函数之diff
diff函数是用来将数据进行某种移动之后与原数据进行比较得出的差异数据,举个例子,现在有一个DataFrame类型的数据df,如下: index value1 A 0 B 1 C 2 D 3 如果执行 ...
随机推荐
- Mvc.JQuery.Datatables
1.NuGet安装Mvc.JQuery.Datatables.Mvc.JQuery.Datatables.Templates和JQuery.Datatables https://github.com/ ...
- sublime中文乱码解决办法
欲解决问题,关键在于让Sublime Text 2支持GB2312和GBK.步骤如下: 1.安装Sublime Package Control. 在Sublime Text 2上用Ctrl+-打开控制 ...
- Cogs 1709. [SPOJ705]不同的子串 后缀数组
题目:http://cojs.tk/cogs/problem/problem.php?pid=1709 1709. [SPOJ705]不同的子串 ★★ 输入文件:subst1.in 输出文件: ...
- [LeetCode] 16. 3Sum Closest 解题思路
Given an array S of n integers, find three integers in S such that the sum is closest to a given num ...
- 一段网上java常见escape和unescape方法的BUG
escape编码和unescape编码,就是将一个字符转换为16进制unicode编码,前面加%字符进行标识. 此处不再多做解释,参考这里:http://www.jb51.net/article/23 ...
- YII 小模块功能
//1,使用updateCounters()来更新计数器字段. Book::model()->updateCounters(array('download_count'=>1),':id= ...
- WPF ArrangeOverride与MeasureOverride
1.MeasureOverride 是FrameworkElement.MeasureOverride 方法 当重写在派生类中,单位是对于子元素所需要布局的大小并确定FrameworkElement ...
- 【Android - 基础】之PopupWindow的使用
创建一个类继承自PopupWindow,编写自定义的PopupWindow类.示例代码如下: import android.app.Activity; import android.graphics. ...
- freemaker的基本语法
先来解释一下freemaker的基本语法了,<# ... > 中存放所有freemaker的内容,之外的内容全部原样输出.<@ ... /> 是函数调用两个定界符内的内容中,第 ...
- js_面向对象编程
主要内容 值类型与引用类型的特征 深拷贝与浅拷贝 对象的动态特性 构造函数的执行过程 异常处理 dom操作(略) <!DOCTYPE html> <html> <head ...