递归写法
首先,我们检查给定的字符串pattern是否为空,如果为空,则说明已经匹配完成,返回true。然后,我们检查目标字符串target是否为空,如果为空,则说明已经遍历完目标字符串,但是还未匹配完成,返回false。接下来,我们比较目标字符串的第一个字符和给定字符串的第一个字符是否相等,如果相等,则递归调用stringMatch方法,将目标字符串和给定字符串都去掉第一个字符,继续匹配剩余的部分。如果不相等,则递归调用stringMatch方法,将目标字符串去掉第一个字符,继续匹配剩余的部分。最终,如果匹配成功,则返回true,否则返回false。在示例中,目标字符串为"abcdefg",给定的字符串为"ac",因此返回结果为true。
public class StringMatch {
public static boolean stringMatch(String target, String pattern) {
if (pattern.length() == 0) {
return true;
}
if (target.length() == 0) {
return false;
}
if (target.charAt(0) == pattern.charAt(0)) {
return stringMatch(target.substring(1), pattern.substring(1));
} else {
return stringMatch(target.substring(1), pattern);
}
}
// 示例用法
public static void main(String[] args) {
String targetStr = "abcdefg";
String patternStr = "ac";
boolean result = stringMatch(targetStr, patternStr);
System.out.println(result); // 输出 true
}
}
while循环写法
我们使用两个索引i和j分别指向目标字符串和给定字符串的字符位置。我们通过循环遍历目标字符串和给定字符串,如果当前字符匹配成功,则将给定字符串的索引j加1。最后,判断给定字符串的索引j是否等于给定字符串的长度,如果相等,则说明给定字符串的所有字符都在目标字符串中存在,返回true,否则返回false。在示例中,目标字符串为"abcdefg",给定的字符串为"ac",因此返回结果为true。
public class StringMatch {
public static boolean stringMatch(String target, String pattern) {
int targetLen = target.length();
int patternLen = pattern.length();
int i = 0; // 目标字符串的索引
int j = 0; // 给定字符串的索引
while (i < targetLen && j < patternLen) {
if (target.charAt(i) == pattern.charAt(j)) {
j++;
}
i++;
}
return j == patternLen;
}
// 示例用法
public static void main(String[] args) {
String targetStr = "abcdefg";
String patternStr = "ac";
boolean result = stringMatch(targetStr, patternStr);
System.out.println(result); // 输出 true
}
}