`

java-写一函数f(a,b),它带有两个字符串参数并返回一串字符,该字符串只包含在两个串中都有的并按照在a中的顺序。

 
阅读更多

public class CommonSubSequence {

	/**
	 * 题目:写一函数f(a,b),它带有两个字符串参数并返回一串字符,该字符串只包含在两个串中都有的并按照在a中的顺序。
	 * 写一个版本算法复杂度O(N^2)和一个O(N) 。
	 * 
	 * O(N^2):对于a中的每个字符,遍历b中的每个字符,如果相同,则拷贝到新字符串中。
	 * O(N):首先使用b中的字符建立一个hash_map,对于a中的每个字符,检测hash_map中是否存在,如果存在则拷贝到新字符串中。
	 * 
	 * we do the O(N).
	 * commonSubSequence(String strA,String strB).
	 * 1.In java,"char" is 16 bits.So we make 'int[] count=new int[65536]'.
	 * If a char('x',e.g) shows up in "strB",we set count['x']=1
	 * 2.Now we iterate "strA".For each char in "strA",'y' for example,
	 * if count['y']=1,we add 'y' to the result sequence.
	 * 3.To avoid duplicate char,we set  count['y']=0 after adding 'y' to result sequence.
	 * 
	 */
	private static final int SIZE=Character.SIZE;
	public static void main(String[] args) {
		String a="#abcdefgaaa";
		String b="lmnopcxbyacccc";
		String c=commonSubSequence(a,b);//abc
		System.out.println(c);
	}

	// return the common sequence of string 'a' and string 'b'.In the order of string 'a'
	public static String commonSubSequence(String a,String b){
		if(a==null||b==null||a.length()==0||b.length()==0){
			return null;
		}
		int[] c=new int[1<<SIZE];//char[65536].Is it too large?
		char min=Character.MIN_VALUE;
		char[] x=a.toCharArray();
		char[] y=b.toCharArray();
		char[] z=new char[a.length()];//the result char sequence
		
		for(int i=0,len=y.length;i<len;i++){
			int pos=y[i]-min;
			c[pos]=1;
		}
		int j=0;
		for(int i=0,len=x.length;i<len;i++){
			int pos=x[i]-min;
			if(c[pos]==1){
				c[pos]=0;
				z[j++]=x[i];
			}
		}
		
		return new String(z,0,j);
	}
	
}

0
0
分享到:
评论

相关推荐

    有两个字符串A,B,判断B是不是A的子串

    题目中给出的标签“判断子串”提示我们,我们需要编写一个程序或函数,接受两个字符串作为输入,并返回一个布尔值,表示第二个字符串是否为第一个字符串的子串。 在编程中,有多种方法可以实现这个功能。以下是一些...

    用一个函数实现两个字符串的比较,即自己写一个 strcmp 函数

    用一个函数实现两个字符串的比较,即自己写一个 strcmp 函数

    JAVA字符串处理函数列表一览

    ### JAVA字符串处理函数列表一览 在Java编程语言中,字符串处理是极其常见且重要的操作之一。字符串类`String`提供了丰富的内置方法来帮助开发者高效地完成各种字符串操作任务。本文将详细解读`String`类中的一些...

    java常用字符串函数集锦

    equals() 函数用于比较两个字符串是否相同,equalsIgnoreCase() 函数用于忽略大小写比较两个字符串是否相同。 例如:String s1 = "Hello"; String s2 = new String(s1); System.out.println(s1.equals(s2)); // ...

    C语言编程-编写函数fun求一个字符串的长度,在main函数中输入字符串,并输出其长度;

    C语言编程-编写函数fun求一个字符串的长度,在main函数中输入字符串,并输出其长度;

    C语言写字符串函数及任意个数求和

    例如,可以创建一个名为`my_strcpy`的函数,接受两个字符指针参数,然后逐个字符地将源字符串复制到目标字符串。 2. **字符串替换(strreplace or custom function)**: 字符串替换涉及到在字符串中找到特定字符...

    java字符串实验题目

    - `substring(int beginIndex, int endIndex)`:返回一个新的字符串,它是原字符串的一部分,从beginIndex到endIndex(不包括)。 - `indexOf(String str)`:返回子字符串在原字符串中第一次出现的位置,若不存在则...

    C语言编程-编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数;

    C语言编程-编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数;

    C语言 不使用strcat函数实现连接两个字符串功能代码

    字符串连接就是将一个字符串连接到另一个字符串的末尾,使其组合成一个新的字符串,在字符串处理函数中,strcat 函数具有字符串连接功能。下面是用C语言实现不使用是strcat 函数实现连接两个字符串的功能。 源代码:...

    写自定义函数stringLower()实现将一个字符串中所有大写字母变为小写字母。在主函数中输入一含有大写字母的字符串,调用该函数并输出改变后的字符串。

    本例中的目标是编写一个名为`stringLower()`的函数,它接受一个包含大写字母的字符串,并将其所有大写字母转换为小写字母。这个功能在处理用户输入、数据清理或格式化输出时非常有用。下面我们将详细讨论如何实现这...

    PTA 6-13 函数实现字符串逆序

    在解决PTA的这个题目时,你需要考虑输入字符串的边界条件,例如空字符串、只包含一个字符的字符串,以及含有特殊字符的字符串。你还需要确保你的函数能正确处理这些情况,并且符合题目可能给出的性能要求。 编写...

    Linux下常用函数-字符串函数

    - **参数**: `nptr` 是指向一个字符串的指针,该字符串包含一个数值(可以是整数或小数,也可以带有科学计数法)。 - **返回值**: 返回转换后的数值。如果输入的字符串不能被解析为有效的数值,则返回0。 **示例...

    C#字符串函数

    Replace 函数用于将字符串中的某个子字符串替换为另一个子字符串。该函数的语法为 Replace(expression, find, replacewith[, compare[, count[, start]]]),其中 expression 为要替换的字符串,find 为要替换的子...

    VB.NET 字符串函数

    StrComp 函数有三个参数,分别是两个要比较的字符串和一个可选的比较方式参数。如果比较方式参数省略,默认情况下将执行二进制比较。 2. StrConv 函数:用于转换字符串的案例,例如将小写字母转换为大写字母,或者...

    字符串做函数参数

    字符串做函数参数,字符串copy函数技术推演,错误点等等

    数据库字符串相加---字符串相加函数

    根据提供的信息,本文将详细介绍一个在SQL Server 2000环境下用于字符串拼接的自定义函数,并对该函数的功能、实现方法以及应用场景进行深入解析。 ### 一、SQL Server 2000简介 SQL Server 2000是微软发布的一款...

    delphi 字符串、数组函数

    Concat 函数连接两个或多个字符串为一个字符串。 示例代码: ``` var S1, S2: String; begin S1 := Concat('A', 'B'); // 连接两个字符串,S1 变量等于 AB。 S2 := Concat('Borland', ' Delphi', ' 7.0'); // ...

    C语言字符串操作函数.docx

    - **功能**:`strtok()` 函数用于将一个字符串按照指定的分隔符分割成多个子字符串,并返回第一个子字符串。 - **语法**: ```c char *strtok(char *str, const char *delim); ``` - **参数**: - `str`: 需要被...

    pb函数库之字符串操作函数

    返回值为一个字符串,该字符串以参数chars中的字符串重复填充而成。 2. Left()函数:Left()函数可以得到字符串左部指定个数的字符。其语法为Left(string, n),其中string是指定要提取子串的字符串,n是指定子串长度...

Global site tag (gtag.js) - Google Analytics