当前位置:网站首页>【力扣】判断子序列
【力扣】判断子序列
2022-08-11 05:31:00 【爱吃西瓜爱吃肉】
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
题目分析:即t字符串中(按顺序)包含s中的字符
方法一:双指针法
定义两个指针i,j,i指向字符串s,j指向t。while循环比较,指针j每次循环都加一,如果指向的字符相等,指针i加一 。如果i循环s结束即都找到了,返回true,也就是最后只需要比较i和s的长度
public static boolean isSubsequence(String s, String t) {
char[] tArray = t.toCharArray();
char[] sArray = s.toCharArray();
int i=0,j=0;
while(j< tArray.length && i < sArray.length){
if(sArray[i]==tArray[j]){
i++;
}
j++;
}
if(i== sArray.length) return true;
return false;
}
方法二:利用indexOf
indexOf,查找指定字符串,指定开始位置,返回该字符串出现的最早位置。如果没找到返回-1。循环s的字符数组,利用t字符串的indexOf方法找到当前的s字符。返回的下标作为下次循环的开始位置(题目:按顺序判断)。判断index如果等于-1即如果有一次没找到直接返回false
例如“axc”“acd”,中间x会找不到,index取值为0 -1。直接返回false,后面没必要继续找
public boolean isSubsequence(String s, String t) {
int index =-1;
if(s.equals("")) return true;
char[] sArray = s.toCharArray();
for(int i=0;i< sArray.length;i++){
index = t.indexOf(sArray[i],index+1);
if(index==-1)return false;
}
if(index!=-1) return true;
return false;
}
继续简化,当index=-1时直接返回Flase,如果已经出循环直接返回true,即全部找到了,不需要再判断了。不可能出现没找到的情况
public static boolean isSubsequence2(String s, String t) {
int index =-1;
char[] sArray = s.toCharArray();
for(int i=0;i< sArray.length;i++){
index = t.indexOf(sArray[i],index+1);
if(index==-1)return false;
}return true;
}
边栏推荐
- JVM学习四:垃圾收集器与内存回收策略
- lua-table引用传递和值传递
- 5月leetcode-C#刷题日志(持续更新中)
- 连接数据库时出现WARN: Establishing SSL connection without server‘s identity verification is not recommended.
- The role of the port
- 【LeetCode-73】矩阵置零
- 【LeetCode-278】第一个错误的版本
- Unity C# 面试题、知识点总结
- Lua 快速入门(四)——多脚本执行
- gerrit configure SSH Key and account, email information
猜你喜欢
随机推荐
C语言-6月8日-求两个数的最小公倍数和最大公因数;判断一个数是否为完数,且打印出它的因子
Building a data ecology for feature engineering - Embrace the open source ecology, OpenMLDB fully opens up the MLOps ecological tool chain
C# 基础之字典——Dictionary(一)
Asis2016 books null off by one
lua-复制一份table,修改新的table,不改变原来的table
Real-time Feature Computing Platform Architecture Methodology and Practice Based on OpenMLDB
【LeetCode-75】 颜色分类
C语言实现扫雷游戏
Pinyougou project combat notes
The mount command - mounted read-only, solution
Matplotlib找不到字体,打印乱码
【LeetCode-74】搜索二维矩阵
杀死进程-查看防火墙状态
lua-table引用传递和值传递
轻松理解进程与线程
【LeetCode-414】第三大的数
js learning advanced (event senior pink teacher teaching notes)
C-动态内存管理
C语言-6月12日-字符替换问题,将一个‘ ’替换为2个‘#’
脚本批量打包渠道包研究