Java LeetCode普通字符串模拟题解示例攻略
1. 题目简述
本题是一道字符串模拟题目,要求实现一个String模拟类,具有以下功能:
- 初始化操作:构造函数接受一个字符串作为参数,将其存储在对象中。
- 获取字符串操作:实现一个
charAt
方法,接受一个整数索引index
,返回字符串指定位置的字符;实现一个substring
方法,接受两个整数索引startIndex
和endIndex
,返回字符串指定区间的子串。 - 查找操作:实现一个
indexOf
方法,接受一个字符串pattern
,返回字符串中第一次出现该模式的下标;实现一个lastIndexOf
方法,接受一个字符串pattern
,返回字符串中最后一次出现该模式的下标。
2. 解题思路
本题的关键在于实现charAt
方法和substring
方法,以及indexOf
方法和lastIndexOf
方法。
2.1 charAt
方法和substring
方法
这两个方法都比较简单,直接按下标遍历字符串即可。实现代码如下所示:
public char charAt(int index) {
if (index < 0 || index >= str.length()) {
throw new IndexOutOfBoundsException();
}
return str.charAt(index);
}
public String substring(int startIndex, int endIndex) {
if (startIndex < 0 || endIndex > str.length() || startIndex > endIndex) {
throw new IndexOutOfBoundsException();
}
return str.substring(startIndex, endIndex);
}
2.2 indexOf
方法和lastIndexOf
方法
这两个方法涉及到字符串的匹配问题,可以使用KMP算法或者暴力匹配算法来实现。这里我们采用暴力匹配算法,实现代码如下所示:
public int indexOf(String pattern) {
if (pattern == null || pattern.length() == 0) {
return 0;
}
for (int i = 0; i < str.length(); i++) {
int j = 0;
for (; j < pattern.length() && i + j < str.length(); j++) {
if (pattern.charAt(j) != str.charAt(i + j)) {
break;
}
}
if (j == pattern.length()) {
return i;
}
}
return -1;
}
public int lastIndexOf(String pattern) {
if (pattern == null || pattern.length() == 0) {
return str.length();
}
for (int i = str.length() - pattern.length(); i >= 0; i--) {
int j = 0;
for (; j < pattern.length(); j++) {
if (pattern.charAt(j) != str.charAt(i + j)) {
break;
}
}
if (j == pattern.length()) {
return i;
}
}
return -1;
}
3. 示例说明
3.1 示例一
假设我们有一个字符串str = "Hello World!"
,现在要对其进行操作,代码如下所示:
MyString myString = new MyString(str);
char c = myString.charAt(0);
String subString = myString.substring(6, 11);
int index = myString.indexOf("World");
int lastIndex = myString.lastIndexOf("l");
System.out.println(c); //输出 'H'
System.out.println(subString); //输出 "World"
System.out.println(index); //输出 6
System.out.println(lastIndex); //输出 9
观察输出结果,对应的字符、子串、索引都符合预期,说明代码实现正确。
3.2 示例二
现在我们来测试一个空字符串的操作,代码如下所示:
MyString myString = new MyString("");
char c = myString.charAt(0);
String subString = myString.substring(0, 5);
int index = myString.indexOf("Hello");
int lastIndex = myString.lastIndexOf("World");
System.out.println(c); //抛出 IndexOutOfBoundsException 异常
System.out.println(subString); //抛出 IndexOutOfBoundsException 异常
System.out.println(index); //输出 -1
System.out.println(lastIndex); //输出 -1
可以看到,对空字符串进行操作时,charAt
和substring
方法会抛出IndexOutOfBoundsException
异常,而索引查找时返回-1。这也符合我们的预期,说明代码正确。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java LeetCode普通字符串模拟题解示例 - Python技术站