比较两个字符串,找出最大的相同子串
2016-05-11 21:51
417 查看
public class Test05 { public static void main(String[] args) { String str1="adfdfghellojavabggiijbffbfhelloworldsdrtyiooipwtfdv"; //String str1="ncvkhvkdfhfhieuwiqwewhellojavaecvbvbnbnqe"; String str2="ncvkhvkdfhfhieuwiqwewhellojavaecvbvbnbndhelloworldfadfafdgagdqe"; System.out.println(test05(str1,str2)); } public static String test05(String str1,String str2){ int len=str2.length(); for (int i = 0; i < str2.length(); i++) {//外层循环,最大的循环次数 for (int j = 0,k=len-i;k<=len ; j++,k++) {//内层循环,截取子串并进行比较 String str3=str2.substring(j, k);//分别从两端截取,得到子串 //截取子串的长度为k-j,即为len-i-j,随着i的增加,子串长度不断变小 //假如字符串为abcd,第一次截取子串阿为abcd,第二次bcd,第三次abc,第四次bc....依此类推 if (str1.contains(str3)) { return str3; //进行比较,返回值 } } } return null; } }
同样的方法,稍有不同,返回一个数组的所有连续的子串
public class Demo0518 {
public static void main(String[] args) {
int[] arr = new int[] { 1, 2, -5, 56, 3, 7, 9, 10, -42, 45 };
Demo(arr, 0, arr.length-1);
}
public static void Demo(int[] arr, int start, int end) {
/**
* 0<=start<=end<=arr.length-1
*/
for (int i = start; i <= end; i++) {
for (int x=i,y=end; x <=y; y--) {
ArrPrint(arr, x, y);
System.out.println("子串的和: "+Sum(arr, x, y));
System.out.println();
}
}
}
public static void ArrPrint(int[] arr,int start ,int end) {
System.out.print("子串:");
for (int i = start; i <= end; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
public static int Sum(int[] arr,int start ,int end){
int sum=0;
for (int i = start; i <= end; i++) {
sum+=arr[i];
}
return sum;
}
}
相关文章推荐
- 第五届山东省ACM angry_birds_again_and_again(积分)
- 关于操作java中的SD卡文件的一些总结
- [转]c++中的类型及运算
- 安卓listview实现购物车
- yii2下拉框带搜索功能
- iOS开发 - 第02篇 - UI进阶 - 02 - TableView
- UVA - 11100 The Trip, 2007
- 无人机视频影像几何校正
- UVA 10652 Board Wrapping 凸包
- Android内存泄漏
- bp算法推导过程
- Android性能优化之Java代码优化
- TQ210学习笔记——uboot代码搬移
- STL 源码剖析 String类
- 先来先服务和短作业优先算法
- 第一节:.net开发环境变量
- Oracle用户,权限,角色以及登录管理 scoot 授权
- 面试之路(31)-操作系统之信号量
- android NDK开发编译C++文件出现Type 'jint' could not be resolved和Unresolved inclusion: <jni.h>的解决办法
- openGL 填充样式