问题1:求s2在s1中出现的次数
s1="abcabcbcacbabbabcba"
s2="abc"
String s1="afjoafagojoaage";
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+"次");
}
主要方法就是将S1分成跟S2一样字符串的大小,一个一个字符串往后移,然后使用equal函数进行比较
问题2:判断字符串s是否是回文
public static void question2(){
/*
问题2:判断字符串s是否是回文
s="上海自来水来自海上"
*/
String s="13088888031";
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的功能,自定义实现
public static void question3(){
/*
问题3:模拟trim的功能,自定义实现
s=" 安利给~ "
*/
String s=" 123123123 ";
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+"]");
}
trim的功能是消除空格 这里我们也是使用类似两个指针,如果左边遇到空格,左边+1,右边遇到空格,右边-1;最后我们循环停止,则打印出来。
问题4:求s1和s2中最大的相同子串(s1.length()>s2.length())
public static void question4(){
/*
问题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"
" is a program language but is "
*/
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);
// System.out.println(sub);
if(s1.contains(sub)){
flag=false;
System.out.println("结果就是["+sub+"]");
break;
}
}
if(!flag){
break;
}
}
}
这里我们使用从大到小的进行比较,首先从整个S2的字符串进行比较,每次比较完就-1;然后比较的时候我们也使用两个指针,类型这样移动当最后一个指针移到最后一位的时候内层循环停止,继续下一次循环。最后选择出来以后则打印。