28. 找出字符串中第一个匹配项的下标

题目:

思路:

【1】暴力破解

【2】动态规划

【3】KMP算法(待写)

代码展示:

//时间4 ms 击败 2.42%
//内存40 MB 击败 5.5%
class Solution {
    public int strStr(String haystack, String needle) {
        int col = haystack.length();
        int row = needle.length();
        // 编辑动态规划的结果
        int[][] result = new int[row][col];
        // 初始化数据
        for (int[] res : result){
            Arrays.fill(res,0);
        }

        // 利用动态规划的方式
        for (int i = 0; i < row; i++){
            for (int j = 0; j < col; j++){
                if (needle.charAt(i) == haystack.charAt(j)){
                    // 特殊情况下,不存在数组越界,如果匹配,只能说匹配到了一个
                    if (i == 0 || j == 0){
                        result[i][j] = 1;
                    }else {
                        // 而非特殊情况下,需要查阅上个字符匹配到了哪个位置且+1
                        result[i][j] = result[i-1][j-1] + 1;
                    }
                    //如果已经匹配完了目标字符串,就应该直接结束返回最先的下标
                    if (result[i][j] == row)
                        return j - row + 1;
                }
            }
        }
        return -1;
    }
}


//时间0 ms击败 100%
//内存39.3 MB 击败 86.36%
class Solution {
    public int strStr(String haystack, String needle) {
        int n = haystack.length(), m = needle.length();
        for (int i = 0; i + m <= n; i++) {
            boolean flag = true;
            for (int j = 0; j < m; j++) {
                if (haystack.charAt(i + j) != needle.charAt(j)) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                return i;
            }
        }
        return -1;
    }
}

 

posted @ 2023-06-27 11:40  忧愁的chafry  阅读(11)  评论(0编辑  收藏  举报