`
bachelor007
  • 浏览: 55224 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

找出两个字符串中,连续相同的字符个数最少为min的字符串

阅读更多

找出两个字符串中,连续相同的字符个数最少为min的字符串

(具体涉及一些不能公布的,还是不说了,有更好的算法,请拍砖讨论)

主要是这个函数--Compare2Str(String str1, String str2, int min),其他不用管

-----------------------------似乎还有点问题!等待明天继续调试


package com.ssj.test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class CompareString {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		String contig1 = "AAGAAACGTATCCGTGTTTACATGGATGGATGTTTCGATCTCATGCATTATGGACACGCA"+
						"AATGCTTTAAGACAAGCTAAAGCTTTAGGAGATGAACTAGTAGTTGGAATTGTAAGTGAT"
					+"GAAGAAATCATCAAGAACAAAGGTCCTCCTGTTTTATCAATGGAGGAAAGATTGGCACTT"
					+"GTTAGTGGATTGAAGTGGGTTGATGAAGTTATTGCTAATGCACCATATGCTATTACCGAA"
					+"GACTTCATGAACAGTCTATTTAAAGAACATAAGATTGATTATATCATTCATGGAGATGAT"
					+"CCTTGTTTGCTTCCTGATGGAAGTGATGCATATGCTTTAGCAAAAAAAGTCGGTCGTTAC"
					+"AAGCAAATTAAACGTACAGAAGGCGTATCAAGCACCGACATTGTAGGAAGGATACTTGCA"
					+"TCCATGGAAGATAAAGAAGTATGTGAAGTTAATGGAGAAAGTAATGAAATGAATAAAAAT"
					+"TTGGACAGCCATTTCAAGGCCAAACATGCCTCTAATTTTTTGCCTACATCAAGAAGAATT"
					+"GTTCAGTTT";

		String EL372564 = "AAGAAACGTATCCGTGTGTACATGGATGGATGTTTTGATCTCATGCATTATGGTCACGCAAATGCTTTAAGACAAGCTAAAGCTTTAGGAGACGAATTAGTGGTTGGAATTGTAAGTGATGAAGAAATCATCAAGAACAAAGGTCCTCCTGTTTTATCAATGGAGGAAAGATTGGCACTTGTTAGTGGATTGAAGTGGGTTGATGAAGTTATTGCTAATGCACCTTATGCTATTACTGAAGACTTCATGAACAGTCTATTTAAAGAACATAAGATTGATTATATCATTCATGGAGATGATCCTTGTTTGCTTCCTGATGGAAGTGATGCATATGCTTTAGCAAAAAAA";
		String EL371249 = "AAGAAACGTATCCGTGTGTACATGGATGGATGTTTTGATCTCATGCATTATGGTCACGCAAATGCTTTAAGACAAGCTAAAGCTTTAGGAGACGAATTAGTGGTTGGAATTGTAAGTGATGAAGAAATCGTCAAGAACAAAGGTCCTCCTGTTTTATCAATGGAGGAAAGATTGGCACTTGTTAGTGGATTGAAGTGGGTTGATGAAGTTATTGCTAATGCACCTTATGCTATTACTGAAGACTTCATGAACAGTCTATTTAAAGAACATAAGATTGATTATATCATTCATGGAGATGATCCTTGTTTGCTTCCTGATGGAAGTGATGCATATGCTTTAGCAAAAAAA";
		String EL347301 = "AAGAAACGTATCCGTGTGTACATGGATGGATGTTTTGATCTCATGCATTATGGTCACGCAAATGCTTTAAGACAAGCTAAAGCTTTAGGAGACGAATTAGTGGTTGGAATTGTAAGTGATGAAGAAATCATCAAGAACAAAGGTCCTCCTGTTTTATCAATGGAGGAAAGATTGGCACTTGTTAGTGGATTGAAGTGGGTTGATGAAGTTATTGCTAATGCACCTTATGCTATTACTGAAGACTTCATGAACAGTCTATTTAAAGAACATAAGATTGATTATATCATTCATGGAGATGATCCTTGTTTGCTTCCTGATGGAAGTGATGCATATGCTTTAGCAAAAAAAGTTGGTCGTTACAAACAAATTAAACGTACAGAAGGCGTATCAAGCACCGACATTGTAGGAAGGATACTTGCATCCATGGAAGAT";
		String EH685069 = "AAGAAACGTATCCGTGTTTACATGGATGGATGTTTCGATCTCATGCATTATGGACACGCAAATGCTTTAAGACAAGCTAAAGCTTTAGGAGATGAACTAGTAGTTGGAATTGTAAGTGATGAAGAAATCATCAAGAACAAAGGTCCTCCTGTTTTATCAATGGAGGAAACATTGGCACTTGTTAGTGGATTGAAGTGGGTTGATGAAGTTATTGCTAATGCACCATATGCTATTACCGAAGACTTCATGAACAGTCTATTTAAAGAACATAAGATTGATTATATCATTCATGGAGATGATCCTTGTCTGCTTCCTGATGGAAGTGATGCATATGCTTTAGCAAAAAAAGTCGGTCGTTACAAGCAAATTAAACGTACAGAAAGCGTATCAAGCACCGACATTGTAGGAAGGGTACTTGCATCCATGGAAGATAAAGAACTATGTGAA";
		
		//		String str3 = "AAGAAACGTATCCGTGT--TTACATGGATGGATGTTTCGATCTCATGCATTATGGACACGCAAATGC";
		System.out.println("--------contig1 and EL372564---------");
		CompareTest(contig1, EL372564);
		System.out.println("\n--------EL371249 and EL372564---------");
		CompareTest(EL371249, EL372564);
		
		System.out.println("\n--------EL372564 and EL347301---------");
		CompareTest(EL372564, EL347301);

		System.out.println("\n--------contig1 and EH685069---------");
		CompareTest(contig1, EH685069);
		
		//System.out.println("AAGAAACGTATCCGTGTTTACATGGATGGATGTTTCGATCTCATGCATTATGGACACGCA".length());
		String contig =  "TNNNNNNNNNNNNNNNNNNNNNACTTATGCACAGACCAACCTGAATGTTGACGTGCTCCA"
						+"CATTTCCTACCTATCTTACACTTACCATAATGGGTGGAATATGTTCTTTCTAAAGTATTT"
						+"TCATTAGGTTTTAAAGCCCACATGCATCTTAAAGAAAATGTAAACCACATGTTTGACATT"
						+"CATTTACACTTAACTACTTTTTTTCCTATAAAAAAGAAAAATGTAAATGTGATGTTCAAA"
						+"TTGCCAATTTGAGAGCCATATTGTGTACATTAAAATTAGTGGCATTTCAAGTCATTTTTC"
						+"TTTCCATGGAATTATTACAAAGGAAAATGCCTTTGAACAATAGAAAGTCATGGATCTATC"
						+"CCAACTCTAAATAAGTGGTATTTTAGTGGGTTTTAAACATGGTTAAAGTTCTTATCCCAG"
						+"AGCTCTAAACCACAAAGCCCAGTTATATTGGTTCTCTTCATCTGTCAGAGGTAAAAACAG"
						+"AGGGTATTGATCTTTTATTTATCTTTGAAGCTTTAAAGTATAATTAGTTAA"+       "AGAAAAAGT"
						+"TTCTGTACTTAGAACATCTCGGTTCTAGCCTTGACTTATGCTAGAAACAAGGATTATATC"
						+"TGTATTAGTCTGGTCATACACTGTTATAAAGAACTACCTGAGACTGGATAATTTATAAAG"
						+"AAAAGAGGTTTAATTAGCTTATGGTTCCACAGGCTGTACAGGAAGCATGCCTGGGGAGGC"
						+"CTTAAGAAACTTACAATCATGGCAGAATGTGAAGAGGAAGAAAGCATGTTTTCTCATGGC"
						+"CAGAGCAAGAGGAAGAGAGAGAAGGGGGAGGTGCTACTCCACTTTTAANGCAACCCAGAT"
						+"CTCATGAGAACTCCACTCCATTGTGCACAAAAATGGCCAAGGGCGGAAATTTCCACCCTC"
						+"GTGATCNNCAATCACCTCCCACCAGGCCCCTCCTCTATTATTGGGGATTACAATTTGGCA"
						+"TGAGATCTGGGTGAGGACACAAATCCAAACCATATCAACATCCCTACTCTACTTACTTTA"
						+"TAAACTTGGTGGGAGAATCAAGTGGCATGGGGATGAAAGTCAATGGATACCGGAAAGAGG"
						+"ACTAATCCATGGCTGAAAGGGGGGTATCCAATTACACCAAGGCTTTACAGGGGAAATATA"
						+"CAGAGGTTAAAACAAAGGTTTGGTCTTTCCAAAA";
		String ENV1180 = "TNNNNNNNNNNNNNNNNNNNNNACTTATGCACAGACCAACCTGAATGTTGACGTGCTCCA"
						+"CATTTCCTACCTATCTTACACTTACCATAATGGGTGGAATATGTTCTTTCTAAAGTATTT"
						+"TCATTAGGTTTTAAAGCCCACATGCATCTTAAAGAAAATGTAAACCACATGTTTGACATT"
						+"CATTTACACTTAACTACTTTTTTTCCTATAAAAAAGAAAAATGTAAATGTGATGTTCAAA"
						+"TTGCCAATTTGAGAGCCATATTGTGTACATTAAAATTAGTGGCATTTCAAGTCATTTTTC"
						+"TTTCCATGGAATTATTACAAAGGAAAATGCCTTTGAACAATAGAAAGTCATGGATCTATC"
						+"CCAACTCTAAATAAGTGGTATTTTAGTGGGTTTTAAACATGGTTAAAGTTCTTATCCCAG"
						+"AGCTCTAAACCACAAAGCCCAGTTATATTGGTTCTCTTCATCTGTCAGAGGTAAAAACAG"
						+"AGGGTATTGATCTTTTATTTATCTTTGAAGCTTTAAAGTATAATTAGTTAA"   +    "GGAAAAGTT"
						+"CTGTACTTAGAACATCTCGGTTCTAGCCTTGACTTATGCTAGAAACAAGGATTATATCTG"
						+"TATTAGTCTGGTCTACACTGTTATAAAGAACTACCTG";
		String ENV446 =  "CCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXTATCCAACTCTAAATAAGTGGTATTT"
						+"AGTGGGTTTTAAACATGGTTAAAGTTCTTATCCCAGAGCTCTAAACCACAAAGCCCAGTT"
						+"ATATTTGTTCTCTTCATCTGTCAGAGGTAAAAACAGAGGGTATTGATCTTTTATTTATCT"
						+"TTGAAGCTTTAAAGTATAATTTGTTCAAGGAAAAGTTTCTGTACTTAGAACATCTCGGTT"
						+"CTAGCCTTGACTTATGCTAGAAACAAGGATTATATCTGTATTAGTCTGTTCATACACTGT"
						+"TATAAAGAACTACCTGAGACTGGATAATTTATAAAGAAAAGAGGTTTAATTAGCTTATGG"
						+"TTCCACAGGCTGTACAGGAAGCATGCCTGGGGAGGCCTTAAGAAACTTACAATCATGGCA"
						+"GAATGTGAAGAGGAAGAAAGCATGTTTTCTCATGGCCAGAGCAAGAGGAAGAGAGAGAAG"
						+"GGGGAGGTGCTACTCCACTTTTAANGCAACCCAGATCTCATGAGAACTCCACTCCATTGT"
						+"GCACAAAAATGGCCAAGGGCGGAAATTTCCACCCTCGTGATCNNCAATCACCTCCCACCA"
						+"GGCCCCTCCTCTATTATTGGGGATTACAATTTGGCATGAGATCTGGGTGAGGACACAAAT"
						+"CCAAACCATATCAACATCCCTACTCTACTTACTTTATAAACTTGGTGGGAGAATCAAGTG"
						+"GCATGGGGATGAAAGTCAATGGATACCGGAAAGAGGACTAATCCATGGCTGAAAGGGGGG"
						+"TATCCAATTACACCAAGGCTTTACAGGGGAAATATACAGAGGTTAAAACAAAGGTTTGGT"
						+"CTTTCCAAAA";
		System.out.println("\n--------contig and ENV1180---------");
		CompareTest(ENV1180, contig);
		
		String str = "";
//		Compare2Str("abcdbce","cbce",2);
		Compare2Str(ENV446,ENV1180,20);
//		System.out.println(ENV446.indexOf());
	}

	public static void CompareTest(String str1, String str2){
		
		int len1 = str1.length();
		int len2= str2.length();
		StringBuffer strb = new StringBuffer();
		int k = (len1>len2 ? len2 : len1);
		//System.out.println("k = "+k);
//		int num = 0;
		for (int i = 0; i<k; i++){
			if(str1.charAt(i) == str2.charAt(i)){
				strb.append(str1.charAt(i));
			}
			else {
//				num = i;
				break;
			}
		}
		System.out.println("the num of the same char :  "+strb.length());
		System.out.println("the same String is : " +strb.toString());
//		System.out.println("the arrays1 is : " +strb.toString());
//		if(strb.toString().equals(str1.substring(0,num))){
//			System.out.println("Very Good!!!");
//		}
		
	}
	
	public static void Compare2Str(String str1, String str2, int min){
  //找出两个字符串中,连续相同的字符个数最少为min的字符串
  int len1 = str1.length();
  int len2= str2.length();
  StringBuffer strb = new StringBuffer();
  String maxStr, minStr;
  int minLen = 0;
  int maxLen = 0;
  if(len1 > len2){
   maxLen = len1;
   minLen = len2;
   maxStr = str1;
   minStr = str2;
  }
  else{
   maxLen = len2;
   minLen = len1;
   maxStr = str2;
   minStr = str1;
  }
  List strList = new ArrayList();
  char c1, c2;
  
  for (int i=0; i<maxLen; i++){
   StringBuffer tempStr = new StringBuffer("");
   c1 = maxStr.charAt(i);
   for(int j=0; j<minLen; j++){
     c2 = minStr.charAt(j);
     while(c1 == c2){
     tempStr.append(c1);
     if(++i<maxLen && ++j<minLen){
      c1 = maxStr.charAt(i);
      c2 = minStr.charAt(j);
     }
     else{
      break;
     }
    }
    if(tempStr.length()>=min){
     strList.add(tempStr);
    }
   }
  }
  Iterator iter = strList.iterator();
  while(iter.hasNext()){
   StringBuffer s = (StringBuffer)iter.next();
   System.out.println("-------" + s.toString());
  }
 }	
	public static void isHaveSubString(String str1, String str2){
		
		if(str1.startsWith(str2)){
			System.out.println("---OK--");
		}
	}
}

 

分享到:
评论

相关推荐

    编辑距离问题 对于给定的字符串A和字符串B,编程计算其编辑距离d(A,B)。

    ### 编辑距离问题 #### 一、问题背景与定义 ...综上所述,编辑距离问题是一个经典的字符串相似度计算问题,通过对字符串进行基本的操作可以有效地计算出两个字符串之间的差异程度,具有重要的理论意义和应用价值。

    计算两字符串的编辑距离

    其基本思想是构建一个二维矩阵,矩阵的行数和列数分别对应两个字符串的长度。矩阵中的每个元素表示对应位置的两个字符之间的编辑距离。 例如,我们有字符串s1="kitten"和s2="sitting",我们可以构建一个7x7的矩阵,...

    字符串按照指定的字节数来截取

    字符串是由字符组成的序列,而“字符串按照指定的字节数来截取”这个话题,就是指如何在字符串中提取固定字节数的部分。在不同的编程语言中,都有相应的函数或方法来实现这一功能。 在Python中,可以使用内置的`...

    Delphi计算字符串的相似度

    字符串相似度计算通常用于找出两个字符串之间的相似程度,这在许多场景下都非常有用,例如拼写检查、搜索引擎排名、推荐系统等。有多种算法可以用来衡量字符串的相似性,包括但不限于: 1. **Levenshtein距离**:也...

    计算两个字符串的编辑距离 -- 快速算法

    编辑距离,又称Levenshtein距离,是一种衡量两个字符串相似度的方法。它是通过计算将一个字符串转换成另一个字符串所需的最少单字符编辑(插入、删除或替换)次数来定义的。在文本处理、生物信息学、搜索建议等领域...

    Java获取两个字符串中最大相同子串的方法

    Java获取两个字符串中最大相同子串的方法是Java编程语言中常见的问题之一,其目的是找到两个字符串中最长的公共子串。这种方法有多种实现方式,但今天小编要分享的是一种简单、实用的方法。 在了解这个方法之前,让...

    字符串相似度比较

    1. **Levenshtein距离**:衡量两个字符串之间转换成彼此所需的最少单字符编辑(插入、删除或替换)的数量。距离越小,相似度越高。 2. **Jaccard相似度**:基于集合论,计算两个字符串的公共子串占总子串集合的比例...

    python 3 实现js中JSEncrypt encrypt方法,rsa模块根据字符串公钥生成加密字符串

    使用时直接调用rsa_encrypt(s, pubkey_str)方法就好了,第一个参数为待加密字符串,第二个参数为公钥,返回值为加密后的字符串 其中_str2key(s)方法是在https://www.cnblogs.com/masako/p/7660418.html这篇文章的...

    cobol 字符串处理

    在上面的例子中,我们使用 FUNCTION 语句来比较两个字符串的大小,并将结果存储在 MAX-STR 和 MIN-STR 中。 三、字符串长度计算 COBOL 中可以使用 LENGTH 函数来计算字符串的长度。例如: ``` DATA DIVISION. ...

    OJ_整型字符串排序

    在C语言中,我们可以使用`strcmp`函数来比较两个字符串,但这个函数是基于字典顺序的,即按照每个字符的ASCII值进行比较,这不适合整型字符串的排序需求。 为了解决这个问题,我们可以首先将整型字符串转换为整数,...

    字符串排序

    ### 字符串排序知识点 #### 一、字符串排序概述 字符串排序是指按照一定的规则对字符...通过以上分析可以看出,虽然这段代码提供了一个基本的字符串排序实现方案,但在实际应用中还需要根据具体需求进行调整和优化。

    算法-动态规划- 线性 DP- 字符串编辑距离(包含源程序).rar

    在计算机科学领域,字符串编辑距离(Levenshtein Distance)是一种衡量两个字符串相似度的指标,它定义了将一个字符串转换为另一个字符串所需的最少单字符编辑操作次数。这些操作包括插入、删除和替换。这个概念广泛...

    字符串相似度算法 levenshtein distance 编辑距离算法

    我们可以用一个二维矩阵来表示两个字符串的编辑距离,其中矩阵的行和列分别对应两个字符串的字符,矩阵中的每个元素表示到当前位置为止,由一个字符串转换到另一个字符串所需的最小编辑距离。 假设我们有两个字符串...

    求两个字符串的最长公共字串。

    题目要求找出两个给定字符串中的最长公共子串。这里需要注意的是,子串与子序列是不同的概念。子串是指原字符串中的连续字符组成的序列,而子序列则是由原字符串中删除某些(也可以不删除)字符后剩下的字符按原来...

    设置字符串每行固定长度

    此外,C#中的`StringSplitOptions`枚举也可以在使用`string.Split()`方法时控制是否保留空项,这对于处理包含多个连续空格或换行的字符串很有帮助。不过,在本例中,我们并不需要这个功能,因为我们的目的是保持固定...

    将字符串转换成日期

    在C++编程中,处理日期和时间通常涉及到各种数据类型和函数,其中包括将字符串转换为日期对象。在这个场景中,我们需要将字符串型的日期转换为`CTime`类型。`CTime`是C++标准库中的一个类,它用于表示日期和时间。...

    python的字符串内建函数方法

    `join(seq)`方法以当前字符串为分隔符,将序列`seq`中的所有元素连接成一个新的字符串。 `ljust(width)`, `lower()`, `lstrip()`分别用于将字符串左对齐并填充空格,将所有大写字母转为小写,以及去除字符串左侧的...

    116、1298:计算字符串距离--2020.04.09a.pdf

    具体来说,输入两个字符串`a`和`b`,输出从字符串`a`转换到字符串`b`所需的最少编辑操作次数。此题在信息学奥林匹克竞赛(NOIP)中有出现,并且给出了三种不同的代码实现方式。 ### 实现方法一 第一种实现方式采用了...

    字符串的字典序问题.txt

    对于两个字符串 s 和 t,如果 s 的字典序小于 t,则存在最小的 i 使得 s[i] [i](其中 0 ≤ i &lt; min(|s|, |t|)),或者 s 是 t 的前缀且 s 的长度小于 t 的长度。 ##### 3. 字典序的应用场景 - **数据加密**:在...

Global site tag (gtag.js) - Google Analytics