代码随想录Day9

lc151

package 字符串;

import java.util.Scanner;

public class lc151 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String s = sc.nextLine();
      System.out.println(fuction01(s));
      
    }



    private static StringBuilder fuction01(String s) {
        // System.out.println("ReverseWords.removeSpace() called with: s = [" + s + "]");
        int start = 0;
        int end = s.length() - 1;
        while (s.charAt(start) == ' ') start++;
        while (s.charAt(end) == ' ') end--;
        StringBuilder sb = new StringBuilder();
        while (start <= end) {
            char c = s.charAt(start);
            if (c != ' ' || sb.charAt(sb.length() - 1) != ' ') {
                sb.append(c);
            }
            start++;
        }
        // System.out.println("ReverseWords.removeSpace returned: sb = [" + sb + "]");
        return sb;
    }
}

kam55

package 字符串;

import java.util.Scanner;

public class kam55 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = Integer.parseInt(in.nextLine());
        String s = in.nextLine();

        int len = s.length();  //获取字符串长度
        char[] chars = s.toCharArray();
        reverseString(chars, 0, len - 1);  //反转整个字符串
        reverseString(chars, 0, n - 1);  //反转前一段字符串,此时的字符串首尾尾是0,n - 1
        reverseString(chars, n, len - 1);  //反转后一段字符串,此时的字符串首尾尾是n,len - 1

        System.out.println(chars);

    }

    public static void reverseString(char[] ch, int start, int end) {
        //异或法反转字符串,参照题目 344.反转字符串的解释
        while (start < end) {
            ch[start] ^= ch[end];
            ch[end] ^= ch[start];
            ch[start] ^= ch[end];
            start++;
            end--;
        }
    }
   /* public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n = sc.nextInt();
        String str = sc.nextLine();

        System.out.println(functon(n,str));

    }

    //事件超时
    private static String functon(int n, String str) {
        StringBuilder sb=new StringBuilder();
        sb.append(str.substring(str.length()-n));
        sb.append(str.substring(0,str.length()-n));
        String s = sb.toString();
        String resl = "";
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i)==32){  //空格的码表是32
                continue;
            }
            resl+=s.charAt(i);
        }
        return  resl;
    }*/
}

KMP求next()


    private static int[] getNext(String s) {
        int next[]=new int[s.length()];
        next[0]=0;
        int j=0;
        for (int i = 1; i < s.length(); i++) {
            while (j>0 && s.charAt(j)!=s.charAt(i)){
                j=next[j-1];
            }
            if (s.charAt(j)==s.charAt(i)){
                j++;
            }
            next[i]=j;
        }
        return next;
    }

lc28

class Solution {
    //前缀表(不减一)Java实现
    public int strStr(String haystack, String needle) {
        if (needle.length() == 0) return 0;
        int[] next = new int[needle.length()];
        getNext(next, needle);

        int j = 0;
        for (int i = 0; i < haystack.length(); i++) {
            while (j > 0 && needle.charAt(j) != haystack.charAt(i)) 
                j = next[j - 1];
            if (needle.charAt(j) == haystack.charAt(i)) 
                j++;
            if (j == needle.length()) 
                return i - needle.length() + 1;
        }
        return -1;

    }
    
    private void getNext(int[] next, String s) {
        int j = 0;
        next[0] = 0;
        for (int i = 1; i < s.length(); i++) {
            while (j > 0 && s.charAt(j) != s.charAt(i)) 
                j = next[j - 1];
            if (s.charAt(j) == s.charAt(i)) 
                j++;
            next[i] = j; 
        }
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务