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 如果执行 ...
随机推荐
- Linux系统下如何修改主机名
vi /etc/sysconfig/network vi /etc/hosts sudo hostname
- tensorflow 保存变量,
代码: #!usr/bin/env python# coding:utf-8"""这个代码的作用是 通过 tensorflow 来计算 y = 0.3x + 0.1 的线 ...
- Centos系统python2.x升级python3.x
1. Centos7初始安装的python版本为2.7.5 2.下载最新的python3.5.2,解压到/usr/local/src 3. 配置.编译.测试.安装(根据软件的README说明) ./c ...
- [转]3proxy 二级代理配置样例
转自:http://www.cnblogs.com/airsong23/p/3893094.html 适应情况: 有时,我们的机器HOST-A只能通过代理服务器HOST-B才可以访问internet, ...
- linux中mysql完整卸载命令操作
yum方式安装的mysql 1.yum remove mysql mysql-server mysql-libs compat-mysql51 2.rm -rf /var/lib/mysql3.rm ...
- 【转】java.lang.StackOverflowError
http://blog.csdn.net/g19920917/article/details/8765638 出现一个java.lang.StackOverflowError异常.弄了半天,又是问高手 ...
- android 73 下载图片
package com.ithiema.imageviewer; import java.io.InputStream; import java.net.HttpURLConnection; impo ...
- A Cross-Platform Memory Leak Detector
Memory leakage has been a permanent annoyance for C/C++ programmers. Under MSVC, one useful feature ...
- WCF - REST服务
WCF REST服务 一个基于REST的WEB服务操作请求只需要体现两点 一是资源的唯一标识 二是操作类型 资源的唯一标识通过URI来完成 而操作类型通过HTTP方法(GET/HEAD POST PU ...
- spring beans源码解读之--bean definiton解析器
spring提供了有两种方式的bean definition解析器:PropertiesBeanDefinitionReader和XmLBeanDefinitionReader即属性文件格式的bean ...