专业平台建设网站关了吗,vpswindows野外大全,玩具购物网站模板,公益网站建设需求提示#xff1a;此文章仅作为本人记录日常学习使用#xff0c;若有存在错误或者不严谨得地方欢迎指正。 文章目录 一、题目二、思路三、解决方案四、JAVA截取字符串的常用方法4.1 通过subString()截取字符串* 一、题目
给你两个字符串 haystack 和 needle #xff0c;请你在… 提示此文章仅作为本人记录日常学习使用若有存在错误或者不严谨得地方欢迎指正。 文章目录 一、题目二、思路三、解决方案四、JAVA截取字符串的常用方法4.1 通过subString()截取字符串* 一、题目
给你两个字符串 haystack 和 needle 请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标下标从 0 开始。如果 needle 不是 haystack 的一部分则返回 -1 。
二、思路
①当haystack字符串的长度小于needle的长度时那么返回-1。 ②若haystack字符串的长度大于等于needle的长度遍历haystack字符串在haystack字符串中找到与needle字符串首个字符相同的字符。 ③通过substring()方法从haystack字符串中截取字符串然后将截取出来的字符串与needle进行比较。 ④若截取的字符串与needle相同则返回首个字符的下标。
三、解决方案
语言Java 执行耗时0 ms 内存消耗40.62 MB
class Solution { public int strStr(String haystack, String needle) { int haystack_length haystack.length(); int needle_length needle.length(); //needle的起始字符char needle_first needle.charAt(0); //只有当haystack长度大于needle的时候才会执行for (int i 0; i haystack_length - needle_length; i) { if (haystack.charAt(i) needle_first) { // 比较从当前位置开始的子字符串和 needle 是否相等 if (haystack.substring(i, i needle_length).equals(needle)) { return i; // 如果相等返回当前位置 } } } // 如果循环结束都没有找到返回 -1 return -1; }
}语言Java 执行耗时0 ms 内存消耗40.67 MB
class Solution {public int strStr(String haystack, String needle) {char needle_first needle.charAt(0);if (haystack.length() needle.length()) {for (int i 0; i haystack.length(); i) {char ch haystack.charAt(i);if ((ch needle_first) (haystack.length() - i needle.length())) {if (haystack.substring(i, i needle.length()).equals(needle)) {return i;}}}}return -1;}
}
假设我们有一个字符串 haystack 的长度为 m另一个字符串 needle 的长度为 n。 ①为了确保可以正确的比较haystack 中的起始字符索引 i 必须满足 i n m因为我们需要 n 个字符来与 needle 进行比较。②如果 i 大于 m - n那么当我们尝试从 haystack 中获取 substring(i, i n) 时将会超出 haystack 的边界因为 i n 将大于 m。③因此我们的循环应该确保 i 不会超出这个范围。这就是为什么循环条件写成 i haystack_length - needle_length 的原因。
四、JAVA截取字符串的常用方法
4.1 通过subString()截取字符串*
substring(int beginIndex) 一个参数
//从指定索引处的字符开始截取直到此字符串末尾
public String substring(int beginIndex) {· · ·
}例如有以下字符串 3
String str abcdefghijklmn;↑_________↑
// 那么调用substring(beginIndex)方法后 从索引号3开始截取到字符串末尾
str.substring(3);// 得到的字符串是defghijklmnsubstring(int beginIndex, int endIndex) 两个参数
// 从beginIndex开始截取到索引endIndex - 1处的字符
public String substring(int beginIndex, int endIndex) {· · ·
} 例如有以下字符串 0 2
String str abcdefghijklmn;↑_↑
// 那么调用substring(beginIndex)方法后 从索引号0开始截取到索引号为3的位置不包括索引号为3的字符
str.substring(0,3); // 得到的字符串是abc