JAVA学习-----String类的算法题(题目来源尚硅谷)

JAVA学习-----String类的算法题(题目来源尚硅谷)

获取两个字符串中最大相同子串。比如:
str1=“abcwerthelloyuiodef” ; str2=“cvhellobnm”

import java.util.ArrayList;
import java.util.Collection;
import java.util.Vector;

public class IntersectionTest {
   public static void main(String[] args) {
   	IntersectionTest t=new IntersectionTest();
   	t.test();
  }
   /*
    * 利用双指针的思想解决此问题,先让左指针固定不动,然后移动右指针。右指针指向的字符如果是连续存在的,则继续移动;
    * 而当右指针指向的元素在长的字符串中找不到的话,左指针与右指针重合,重新查找
    */
   public void test() {
   	int ans=0;
   	int max=0;
   	String str1="abcwerthelloyuiodef";
   	String str2="cvhellobnm";
   	
   	if(str1.length()<str2.length()) { //为了便于比较,将长度较长的字符串作为被查询的一方
   		String s;
   		s=str1;
   		str1=str2;
   		str2=s;
   	}
   	char []c=str2.toCharArray();
   	Vector vec=new Vector();  //创建一个容器,因为容器的长度是动态的,在查找过程我们无法确定字符串的长度
   	int left=0;
   	int right=0;
   	int start = 0,end=0;    //用来记录最大相同字串的起始位置和末位置
   	while(right<str2.length()) {
   		
   		vec.add(c[right]); //将元素插入到容器中
   		right++; //右指针向后移动
   		char []c1=new char[vec.size()]; 
   		for(int j=0;j<vec.size();j++) {
   			c1[j]=(char)vec.elementAt(j);//将容器中的数据复制给字符数组
   		}
   		String str=new String(c1); //将字符数组转化为字符串
   		if(str1.contains(str)) {
   			ans++;
   			if(ans>max) {
   				start=left;
   				end=right;
   			}
   		}else {
   			left=right;
   			vec.add(left);
   			vec.clear(); //不要忘记要将容器中的数据清除,重新添加数据
   		}
   	}
   	System.out.println(str2.substring(start,end));
   }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值