字符串序列判定/最后一个有效字符
题目描述:字符串序列判定/最后一个有效字符
输入两个字符串S和L,都只包含英文小写字母。S长度<=100,L长度<=500,000。判定S是否是L的有效子串。
判定规则:
S中的每个字符在L中都能找到(可以不连续),
且S在L中字符的前后顺序与S中顺序要保持一致。
(例如,S=”ace”是L=”abcde”的一个子序列且有效字符是a、c、e,而”aec”不是有效子序列,且有效字符只有a、e)
输入描述
输入两个字符串S和L,都只包含英文小写字母。S长度<=100,L长度<=500,000。
先输入S,再输入L,每个字符串占一行。
输出描述
输出S串最后一个有效字符在L中的位置。(首位从0开始计算,无有效字符返回-1)
用例
用例1
输入
ace
abcde
输出
4
用例2
输入
fgh
abcde
输出
-1
解题:
public static int findSonString() {
int index = -1;
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
String l = scanner.nextLine();
System.out.println(l.length());
StringBuffer sb = new StringBuffer();
// 查出所有 包含s字符的字符串
for (int i = 0; i < l.length(); i++) {
char c = l.charAt(i);
if (s.contains(String.valueOf(c))) {
sb.append(c);
}
}
Pattern compile = Pattern.compile(s);
Matcher matcher = compile.matcher(sb);
int count = 0;
while (matcher.find()) {
count++;
}
// 最后的有效字符
if (count > 0) {
index = 0;
while (count > 0) {
count--;
for (int i = 0; i < s.length(); i++) {
index += l.indexOf(s.charAt(i)) + 1;
l = l.substring(l.indexOf(s.charAt(i)) + 1, l.length());
}
}
}
return index;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~