zoukankan      html  css  js  c++  java
  • Google编程题:最小操作数

    给定一个原串和目标串,能对源串进行如下操作: 
    1.在给定位置插入一个字符 
    2.替换任意字符 
    3.删除任意字符 要求完成一下函数,返回最少的操作数,使得源串进行这些操作后等于目标串。源串和目标串长度都小于2000。

    动态创建的了二维指针数组,要记得释放。
    int cal_distance( string source, string target)
    {
    	if(source.size()==0)
    		return target.size();
    	if (target.size()==0)
    		return source.size();
    	//if (source.size()==0||target.size()==0)
    	//	return 0;
    	int len_src=source.size();
    	int len_trg=target.size();
    	int **f;
    	f=new int*[len_src+1];
    	for (int i=0;i<=len_src;i++)
    	{
    		f[i]=new int [len_trg+1];
    	}
    
    	//这里纯用于测试
    	for (int i=0;i<len_src+1;++i) 
    		f[i][0]=i;				
    	for (int i=0;i<len_trg+1;++i) 
    		f[0][i]=i;				
    	int temp = 0;
    	for (int j=0;j<len_trg;++j)	
    	{
    		for (int i=0;i<len_src;++i)	
    		{
    			if(source[i]==target[j])
    				f[i+1][j+1]=f[i][j];
    			else
    			{
    				temp = min(f[i][j]+1,f[i][j+1]+1);
    				f[i+1][j+1]=min(f[i+1][j]+1,temp);
    			}
    			//cout<<i<<" "<<j<<" "<<f[i][j]<<endl;
    		}
    	}
    	int steps=f[len_src][len_trg];
    	for (int i=0;i<=len_src;i++)
    	{
    		delete[]f[i];
    	}
    	delete[]f;
    	return steps;
    
    }
    int main()
    {
    	string source,target;
    	cin>>source>>target;
    	int steps=cal_distance(source,target);
    	cout<<steps;
    	return 0;
    }


  • 相关阅读:
    JVM(7) Java内存模型与线程
    JVM(6) 字节码执行引擎
    JVM(5) 类加载机制
    JVM(4) 类文件结构
    JVM(3) 垃圾收集器与内存分配策略
    python的with
    python http server handle json
    c++文件读写
    python字符串处理
    python decorator
  • 原文地址:https://www.cnblogs.com/fushuixin/p/7413205.html
Copyright © 2011-2022 走看看