LeetCode字符串

647 回文子串

思路:回文子串是对字符串的子串进行判断,看是否为回文子串。子串分为奇数偶数的情况,抽出一个方法分别对奇偶情况进行判断。定义左右指针,对指针区间进行是否回文,奇数以一个元素为中心,偶数以两个元素为中心,判断中心两边是否相等。

public int countSubstrings(String s) {
       int res=0;
       for(int i=0;i<s.length();i++){
           res+=HuiWenZiChuan(s,i,i); //奇数子串
           res+=HuiWenZiChuan(s,i,i+1); //偶数子串
       }
       return res;
    }
    public int HuiWenZiChuan(String s,int l,int r){
        int count=0;
        while(l>=0&&r<s.length()&&s.charAt(l)==s.charAt(r)){ //以子串为中心判断两边是否相等
            l--;
            r++;
            count++;
        }
        return count;
   }

28 实现strStr()

思路:双指针,i指针控制haystack,j指针控制needle,i和j进行相等匹配,相等两个指针同时移动,不等回溯,从第二个元素开始进行匹配。

public int strStr(String haystack, String needle) {
       int i=0;
       int j=0;
       if(needle.length()==0)
       return 0;
       while(i<haystack.length()){
           if(needle.charAt(j)==haystack.charAt(i)){ //匹配
               i++;
               j++;
               if(j==needle.length()){
                   return i-j; //出现下标
               }
           }else{
               i=i-j+1; //回溯
               j=0;
           }
       }
       return -1;
    }

58 最后一个单词的长度

思路:定义end指针,从字符串最后一位开始,碰到空格前移,停在最后一个字母的位置,start指针从end位置开始左移,碰到空格后停止。end-start为最后一个单词长度。

public int lengthOfLastWord(String s) {
       int end=s.length()-1;
        while(end>=0&&s.charAt(end)==' '){ //去掉最后一个单词后的空格
            end--;
        }
        if(end<0){
            return 0;
        }
        int start=end;
        while(start>=0&&s.charAt(start)!=' '){ //找到单词开始的位置
            start--;
        }
        return end-start; //单词长度
    }

14 最长公共前缀

思路:调用indexOf()方法判断后面的字符串是否是第一个字符串的子串,如果不是,调用substring()对第一个字符串进行一点一点截取,直到第一个字符串是后面所有字符串的子串为止,返回str为公共前缀。

public String longestCommonPrefix(String[] strs) {
       if(strs.length==0)
           return "";
        String str = strs[0];
        for(int i=1;i<strs.length;i++){
            while(strs[i].indexOf(str)!=0){ //第一个字符串不是后面每一个字符串的子串
                str=str.substring(0,str.length()-1); //对第一个字符串进行截取
                if(str.isEmpty())
                    return "";
            }
        }
        return str; //返回前缀
    }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值