问题1:求s2在s1中出现的次数 s1="abcabcbcacbabbabcba" s2="abc"
题目分析:求子串在串中出现的次数,我们首先应该想到需要用substring(int beginIndex, int endIndex) 这个方法,我们先设置一个i作为大串开始位置的角标,然后i一直向后遍历,i每次都截取和子串一样长的串和子串进行比较,如果相等则count+1,一直到大串长度-子串长度+1即可
class Test03{
public static void main(String[] args){
question1();
}
public static void question1(){
String s1="abcabcbcacbabbabcba";
String s2="abc";
int count=0;
for(int i=0;i<s1.length()-s2.length()+1;i++){
String sub=s1.substring(i,i+s2.length());
if(sub.equals(s2)){
count++;
}
}
System.out.println("s2在s1中出现了"+count+"次");
}
}
问题2:判断字符串s是否是回文 s="上海自来水来自海上"
题目分析:先假设两个指针,一个从头开始,一个从后往前,如果两个指针指的字是一样的则继续往前,若在中途有汉字不一样,直接跳出循环,若一直一样,则当前面的角标大于后面角标时,循环结束。
class Test03{
public static void main(String[] args){
question2();
}
public static void question2(){
int left=0;
int right=s.length()-1;
boolean flag=true;
while(true){
if(s.charAt(left)==s.charAt(right)){
left++;
right--;
if(left>=right){
break;
}
}else{
flag=false;
break;
}
}
System.out.println("s是回文吗:"+flag);
}
}
问题3:模拟trim的功能,自定义实现 s=" 安利给~ ”
问题分析:同问题2思想一致,先设置两个指针,一个从前面开始向后走,一个从后向前走,当遇到空格时继续移动,当遇到不是空格时则停止
class Test03{
public static void main(String[] args){
question3();
}
public static void question3(){
int left=0;
int right=s.length()-1;
while(s.charAt(left)==' '){
left++;
}
while(s.charAt(right)==' '){
right--;
}
String res=s.substring(left,right+1);
System.out.println("["+res+"]");
}
}
问题4:求s1和s2中最大的相同子串(s1.length()>s2.length()) s1="Python is a program language but is slow";
s2="Java is a program language but is fast"
题目分析:先将s2同s1进行比较,看s2是否在s1当中,不是的话;将s2的长度-1与s1进行比较,此时需要注意,将s2的长度-1,会有两种结果,一种是1-s2.length-1,还有一种是2-s2.length,我们要将所有的结果都考虑到依此类推,直到找出为止
class Test03{
public static void main(String[] args){
question4();
}
public static void question4(){
String s1="Python is a program language but is slow";
String s2="Java is a program language but is fast";
boolean flag=true;
for(int len=s2.length();len>=1;len--){
for(int i=0,j=len-1;j<s2.length();i++,j++){
String sub=s2.substring(i,j+1);
if(s1.contains(sub)){
flag=false;
System.out.println("结果就是["+sub+"]");
break;
}
}
if(!flag){
break;
}
}
}
}