算法小知识-----8.21-----检查单词是否为其他单词的前缀

47 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第23天,点击查看活动详情

今天是痛苦周日,只因为明天就周一了,遥遥无期的任务

检查单词是否为其他单词的前缀

该题出自力扣的1455题 —— 检查单词是否为其他单词的前缀【简单题】

审题

给你一个字符串 sentence 作为句子并指定检索词为 searchWord ,其中句子由若干用 单个空格 分隔的单词组成。请你检查检索词 searchWord 是否为句子 sentence 中任意单词的前缀。

  • 如果 searchWord 是某一个单词的前缀,则返回句子 sentence 中该单词所对应的下标(下标从 1 开始)。如果 searchWord 是多个单词的前缀,则返回匹配的第一个单词的下标(最小下标)。如果 searchWord 不是任何单词的前缀,则返回 -1 。
  • 字符串 s 的 前缀 是 s 的任何前导连续子字符串。
  • 该题题意确实很简单,毕竟是简单题,因此直接暴力过也可以

  • 给出两个字符串,第一个字符串用空格作为分割的单词组,第二个字符串作为前缀的识别

  • 因此选择用暴力

    • 利用String 的 split方法,切割字符串得到数组
    • 遍历字符串数组
    • 因为是前缀,所以不能直接使用contain方法,可以另辟蹊径
      • 先判断长度是否大于前缀字符串
      • 在利用subString方法,截取长度的前缀,通过截取的前缀,使用equal方法判断是否相等
      • 最后返回当前下标的 + 1
  • 也可以直接调库

    • 使用String的startWith方法
    • 本质上也是利用了string转char数组,再循环长度进行判断
public boolean startsWith(String prefix, int toffset) {
    char ta[] = value;
    int to = toffset;
    char pa[] = prefix.value;
    int po = 0;
    int pc = prefix.value.length;
    // Note: toffset might be near -1>>>1.
    if ((toffset < 0) || (toffset > value.length - pc)) {
        return false;
    }
    while (--pc >= 0) {
        if (ta[to++] != pa[po++]) {
            return false;
        }
    }
    return true;
}

编码

class Solution {
    public int isPrefixOfWord(String sentence, String searchWord) {
        String[] s = sentence.split(" ");
        int n = searchWord.length();
        for (int i = 0;i<s.length;i++) {
            if (s[i].length() >= n) {
                if (s[i].substring(0, n).equals(searchWord)) {
                    return i +1;
                }
            }
        }
        return -1;
    }
}

image.png