关于常用函数的一些题型

问题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;然后比较的时候我们也使用两个指针,类型这样移动当最后一个指针移到最后一位的时候内层循环停止,继续下一次循环。最后选择出来以后则打印。

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值