- 浏览: 1232487 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (706)
- 全部博客(10000) (0)
- java基础 (123)
- 算法及数据结构 (64)
- SSH框架整合与平台系统分析 (11)
- j2ee (46)
- Oracle (95)
- SQL Server (11)
- javaScript (73)
- Ajax (22)
- jQuery (39)
- ExtJs (4)
- jsp (13)
- Servlet (6)
- struts1 (2)
- struts2 (33)
- Ibatis (2)
- hibernate (24)
- Spring (11)
- 设计模式 (8)
- 正则表达式 (9)
- UML (0)
- XML (9)
- linux (19)
- CSS (11)
- FreeMarker (4)
- nginx 与 memcached (6)
- SEO (5)
- Web 服务器 (11)
- junit 与 selenium2 (4)
- MyEclipse 有关的问题 (24)
- 生活杂感 (37)
- 看过的书 (2)
- 技术牛人 (2)
- 需要优化的例子 (3)
- English 学习 (7)
- bug修改的解决方法 (2)
- 数据库实战经验总结 (1)
- 期待解决的问题 (20)
- 等待自己学习的东西 (15)
- 自己公司代码结构总结 (15)
- 企业经营之道 (23)
- 工具管理 (1)
- 世范水晶 (2)
最新评论
-
hustkeai:
第一个方法是不对的
求一个Map中最大的value值,同时列出键,值 -
qq591920734:
java List 排序 Collections.sort() 对 List 排序(首先年龄排序,如果年龄相同,则按名字排序) -
qq591920734:
[color=orange][/color]包女包女不女
java List 排序 Collections.sort() 对 List 排序(首先年龄排序,如果年龄相同,则按名字排序) -
timer_yin:
seagrave 写道这个算法想法不错,但太耗时,我用1、2、 ...
用1、2、2、3、4、5这六个数字,数字排序经典算法 -
hellostory:
日常生活中,我们都不按你上面的那个方法算的!!!
JAVA小函数-计算日期差
求两字符串的公共子串,如abc123与123456的公共字串为123,基本想法是在长的字符串前面加上长度等于短字符串的空格前缀,然后拿短字符串与新字符串挨个匹配,匹配上的置上匹配字符,否则置上空格,这样的新串就包含了匹配字串和空格,再劈分放入set即可,重复的元素会被set略过去。
代码如下:
package com.sitinspring;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* 求两字符串的公共子串,如abc123与123456的公共字串为123
*
* @author sitinspring(junglesong@gmail.com)
* @since 2008-6-12 下午02:04:06
* @vsersion 1.00 创建 sitinspring 2008-6-12 下午02:04:06
*/
public class CommonChildString{
private static final char Space = ' ';
Set<String> commonChildStrSet;
public CommonChildString(String str1,String str2){
// 在str1前加上与str2等长的空格,以免漏过前面的共同字串,这样做让str1也必然比str2长了
str1=getPrefix(str2.length())+str1;
// 用来存放匹配字串,set能自动过滤掉重复的元素
commonChildStrSet=new HashSet<String>();
for(int i=0;i<str1.length();i++){
// 先取字串
String childStr=getSubString(str1,i, str2.length());
// 找字串和str2匹配的部分,匹配不上的位置上空格,如123和1a3匹配完变成1_1
String commonStr=getCommonString(childStr,str2);
// 把匹配的结果按空格劈分后加入到Set中
commonChildStrSet.addAll(getSplitResult(commonStr));
}
}
/**
* 去掉空格部分,把不是空格的匹配字串取出放入到链表中返回
* @param str
* @return
*/
public List<String> getSplitResult(String str){
List<String> ls=new ArrayList<String>();
str=str.trim();
String[] arr=str.split("\\s+");
for(String tmp:arr){
if(tmp.length()>0){
ls.add(tmp);
}
}
return ls;
}
/**
* 返回长度为为n的空格字符串
* @param n
* @return
*/
private String getPrefix(int n){
StringBuffer sb=new StringBuffer();
for(int i=0;i<n;i++){
sb.append(Space);
}
return sb.toString();
}
/**
* 将op1和op2按位比较,相等取哪一位所在的字符,否则留为空格,比较结果返回
*
* @param op1
* @param op2
* @return
*/
public String getCommonString(String op1,String op2){
StringBuffer sb=new StringBuffer();
for(int i=0;i<op1.length();i++){
char c1=op1.charAt(i);
char c2=op2.charAt(i);
sb.append(c1==c2?c1:Space);
}
return sb.toString();
}
/**
* 从str中从startIndex开始截取长度为length的子字符串
* @param str
* @param startIndex
* @param length
* @return
*/
private String getSubString(String str,int startIndex,int length){
String strTmp=str.substring(startIndex);
int n=strTmp.length();
return strTmp.substring(0, length>n?n:length);
}
public Set<String> getCommonChildStrSet() {
return commonChildStrSet;
}
/**
* 测试
* @param args
*/
public static void main(String[] args){
String op1="123abc456";
String op2="abcdef123789655";
CommonChildString commonChildString=new CommonChildString(op1,op2);
// 输出观察
System.out.print(op1+"和"+op2+"的匹配字串有:");
for(String tmp:commonChildString.getCommonChildStrSet()){
System.out.print(tmp+",");
}
System.out.print("\n");
}
}
测试结果:
123abc456和abcdef123789655的匹配字串有:5,123,abc,6,
代码如下:
package com.sitinspring;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* 求两字符串的公共子串,如abc123与123456的公共字串为123
*
* @author sitinspring(junglesong@gmail.com)
* @since 2008-6-12 下午02:04:06
* @vsersion 1.00 创建 sitinspring 2008-6-12 下午02:04:06
*/
public class CommonChildString{
private static final char Space = ' ';
Set<String> commonChildStrSet;
public CommonChildString(String str1,String str2){
// 在str1前加上与str2等长的空格,以免漏过前面的共同字串,这样做让str1也必然比str2长了
str1=getPrefix(str2.length())+str1;
// 用来存放匹配字串,set能自动过滤掉重复的元素
commonChildStrSet=new HashSet<String>();
for(int i=0;i<str1.length();i++){
// 先取字串
String childStr=getSubString(str1,i, str2.length());
// 找字串和str2匹配的部分,匹配不上的位置上空格,如123和1a3匹配完变成1_1
String commonStr=getCommonString(childStr,str2);
// 把匹配的结果按空格劈分后加入到Set中
commonChildStrSet.addAll(getSplitResult(commonStr));
}
}
/**
* 去掉空格部分,把不是空格的匹配字串取出放入到链表中返回
* @param str
* @return
*/
public List<String> getSplitResult(String str){
List<String> ls=new ArrayList<String>();
str=str.trim();
String[] arr=str.split("\\s+");
for(String tmp:arr){
if(tmp.length()>0){
ls.add(tmp);
}
}
return ls;
}
/**
* 返回长度为为n的空格字符串
* @param n
* @return
*/
private String getPrefix(int n){
StringBuffer sb=new StringBuffer();
for(int i=0;i<n;i++){
sb.append(Space);
}
return sb.toString();
}
/**
* 将op1和op2按位比较,相等取哪一位所在的字符,否则留为空格,比较结果返回
*
* @param op1
* @param op2
* @return
*/
public String getCommonString(String op1,String op2){
StringBuffer sb=new StringBuffer();
for(int i=0;i<op1.length();i++){
char c1=op1.charAt(i);
char c2=op2.charAt(i);
sb.append(c1==c2?c1:Space);
}
return sb.toString();
}
/**
* 从str中从startIndex开始截取长度为length的子字符串
* @param str
* @param startIndex
* @param length
* @return
*/
private String getSubString(String str,int startIndex,int length){
String strTmp=str.substring(startIndex);
int n=strTmp.length();
return strTmp.substring(0, length>n?n:length);
}
public Set<String> getCommonChildStrSet() {
return commonChildStrSet;
}
/**
* 测试
* @param args
*/
public static void main(String[] args){
String op1="123abc456";
String op2="abcdef123789655";
CommonChildString commonChildString=new CommonChildString(op1,op2);
// 输出观察
System.out.print(op1+"和"+op2+"的匹配字串有:");
for(String tmp:commonChildString.getCommonChildStrSet()){
System.out.print(tmp+",");
}
System.out.print("\n");
}
}
测试结果:
123abc456和abcdef123789655的匹配字串有:5,123,abc,6,
发表评论
-
查找 字符串中 重复字符最多的个数
2013-09-03 12:13 1442public static void main(String[ ... -
JAVA中 RETURN与break有何区别
2013-07-08 11:05 1039想看一个例子: public class G { ... -
一位map,二位map变成字符串后,再变成map的解析过程
2011-12-20 09:38 2757public class G { public s ... -
生成必须有大写小写和数字的随机字符串
2011-11-21 22:56 1363public class Teee { public stat ... -
For_循环练习
2011-10-11 10:47 1398【程序2】 题目:判断10 ... -
彩票 31 选 7
2011-09-07 16:16 1024方法一、用集合实现( ... -
java 循环总结
2011-09-07 10:30 9911、for(){} 比较常用的for循环是 for(i ... -
break 和 continue的用法
2011-08-30 16:41 1544break的作用是跳出这个循环(如果这个break或者cont ... -
快速排序原理及java实现
2011-07-14 01:05 2506快速排序是对冒泡排序的一种改进。它的基本思想是:通过一躺排序将 ... -
Collections 类的方法总结
2011-07-11 17:16 1283public class TestCollect { publ ... -
Collections 类的总结
2011-07-11 17:10 9311、有52张扑克牌要随机发牌给四个玩家,并且四个玩家牌的数量是 ... -
有52张扑克牌要随机发牌给四个玩家,并且四个玩家牌的数量是相同的?
2011-07-11 17:08 2030public class TestList { public ... -
关于Arrays.asList的问题
2011-07-10 16:04 1298将数组转成List问题,通常我们习惯这样写成:List ... -
Arrays方法的总结
2011-07-10 03:03 989public class TArrays { public ... -
Arrays集合总结
2011-07-09 20:37 918Arrays.binarySearch();的用法 A ... -
Arrays.binarySearch();的用法。
2011-07-09 20:34 33018Arrays.binarySearch();的用法。 pub ... -
Comparable<T> 和Comparator 的用法区别?
2011-07-07 00:05 1515答:1、Comparable<T>是一个借口里面只 ... -
TreeSet集合总结
2011-07-06 01:57 899TreeSet 集合中 的comparator()和desce ... -
TreeSet 集合中 的comparator()和descendingIterator()方法的应用对比
2011-07-06 01:53 1535TreeSet 集合中 的comparator()和desce ... -
Iterator和listIterator的区别
2011-06-30 21:44 851我们在使用List,Set的时候,为了实现对其数据的遍历,我们 ...
相关推荐
本文实例讲述了JavaScript自定义函数实现查找两个字符串最长公共子串的方法。分享给大家供大家参考,具体如下: //查找两个字符串的最长公共子串 function findSubStr(s1,s2){ var S=sstr= ,L1=s1.length,L2=s2....
通过编辑距离算法对两字符串相似度对比后顺序取出所有公共子串
本主题将深入探讨如何使用C++语言来实现一个算法,该算法能够找出两个字符串中的最大公共子串。公共子串是指同时存在于两个或多个字符串中的任意非空字符序列。在本问题中,我们目标是找到最长的这样一个子串。 ...
求N个字符串的最长公共子串,N,字符串长度不超过255。例如N=3,由键盘依次输入3个字符串为 Whatislocalbus? Namesomelocalbuses. loca1busisahighspeedI/Obusclosetotheprocessor. 则最长公共子串为“local...
在编程领域,最长公共子串(Longest Common Substring,LCS)问题是一个经典的问题,它寻找两个或多个字符串中的最长连续子序列,这个子序列同时存在于所有字符串中。在这个问题中,我们专注于PHP如何解决两个字符串...
在C语言中,求两个字符串的最长公共子串是一个经典的问题,它涉及到字符串处理和算法。最长公共子串是指在两个或多个字符串中都存在的、且长度最长的连续字符序列。这个问题在文本处理、数据比较和生物信息学等领域...
此程序为VC6.0实现判断一个字符串是否为另一个字符串的子串
- (c) 更进一步:无论输入顺序,都能正确检测短字符串是否包含在长字符串中,这意味着需要检查短字符串是否包含在长字符串的任何位置,而不仅仅是开头。 实验代码示例: ```java // 简化后的部分代码 public class...
字符串的子串删除问题 在本文中,我们探讨了Codeforces Round #452 (Div. 2) F题的两种解决方案。该问题的关键点在于字符串的子串删除问题。 1. 问题描述 给定一个长度为n的字符串和m次操作,每次操作给出两个...
在Java编程中,实现字符串匹配并...总之,Java实现字符串匹配求两个字符串的最大公共子串是一个涉及字符串处理和动态规划的经典问题。通过理解上述算法思想和代码实现,开发者可以有效地处理文本数据的比较和分析任务。
输出字符串的子串。
PTA 7-29 删除字符串中的子串
根据给定的信息,本文将详细解释如何在一个字符串中查找特定子串出现的次数,并通过提供的代码示例来进一步阐述这一过程。我们将从以下几个方面进行深入探讨: ### 1. 字符串与子串的基本概念 #### 1.1 字符串 在...
两个字符串里求最长的公共子串
求两个字符串的最长公共子串 思想:建立一个二维数组,保存连续位相同与否的状态 ''' def getNumofCommonSubstr(str1, str2): lstr1 = len(str1) lstr2 = len(str2) record = [[0 for i in range(lstr2+1)] for j...
用本程序可得到字符串的相似度和字符串的公共子串以及编辑距离。
题目中给出的标签“判断子串”提示我们,我们需要编写一个程序或函数,接受两个字符串作为输入,并返回一个布尔值,表示第二个字符串是否为第一个字符串的子串。 在编程中,有多种方法可以实现这个功能。以下是一些...
在C#中,处理字符串时,我们经常需要从一个较大的字符串中提取出特定部分,比如位于两个已知字符串之间的子串。这在解析日志、处理配置文件或者从HTML源码中提取信息时非常常见。标题中的“字符串提取(获取两个字符...
### 两个字符串中最大相同的子串 #### 问题描述 本题目主要关注的是在两个给定的字符串中找到最长的相同子串。给定的两个字符串分别为 `"qwerabcdtyuiop"` 和 `"xcabcdvbn"`。目标是找出这两个字符串中的最长相同...
题目要求编写一个C++程序来找到两个给定字符串中的最长公共子串。例如,对于字符串`a="abcrrrerads"`和字符串`b="afdabcssbcrrresswrds"`,最长公共子串为`"bcrrre"`。 #### 三、算法原理 本程序采用了一个简单的...