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; //返回前綴
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章