字符串序列判定/最后一个有效字符

题目描述:字符串序列判定/最后一个有效字符
输入两个字符串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;
}

posted @   vello  阅读(57)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示