第四章习题解析

问题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;
            }
        }

    }
}


       

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值