请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于392号题:判断子序列

请问老师,下面这个解法中
class Solution {
public boolean isSubsequence(String s, String t) {
int index = -1;
for (char c : s.toCharArray()){
index = t.indexOf(c, index+1);
if (index == -1) return false;
}
return true;
}
}
在增强型for循环中,每次执行一次后,第二次开始执行时index的值是不是还是为-1,并没有发生改变?

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2019-08-05 12:43:08

其实我没有太理解你说的“开始执行时”是什么时候。


但是可以这样实际打印出 index 看一看?

class Solution {
    public boolean isSubsequence(String s, String t) {
        int index = -1;
        for (char c : s.toCharArray()){
            System.out.println("index = " + index); // 在这里看看 index 是多少?
            index = t.indexOf(c, index+1);
            System.out.println("index = " + index); // 在这里再看看 index 是多少?
            if (index == -1) return false;
        }
        return true;
    }
}


也可以使用单步跟踪的时候,实际观察一下,你关心的值,在你关心的位置,具体是多少?这是学习算法的重要方式哦。


加油。

0 回复 有任何疑惑可以回复我~
  • 提问者 蒙特卡洛 #1
    class Solution {
        public boolean isSubsequence(String s, String t) {
            int index = 0;
            for (char c : s.toCharArray()){
                index = t.indexOf(c, index);
                if (index == -1) return false;
            }
            return true;
        }
    }
    请问这样写为什么不对呢?
    回复 有任何疑惑可以回复我~ 2019-08-05 13:35:16
  • 提问者 蒙特卡洛 #2
    是我理解错了,-1应该是当t.indexOf(c, index+1)方法没有搜索到对应的字母时返回的。毕竟子字符串中只要有一个字母没被包含就应返回false。但是我没懂index的初值为什么必须要设为-1,设置为0,后面改成t.indexOf(c, index),为什么leetcode上运行显示错误呢?
    回复 有任何疑惑可以回复我~ 2019-08-05 14:05:55
  • liuyubobobo 回复 提问者 蒙特卡洛 #3
    你在问题描述中的代码,在第一次调用的时候,从index + 1开始找。index设置成-1,则第一次从0开始找,是正确的。index设置成0,则第一次从1开始找,漏掉了0的位置。你在评论区贴的代码,不管index初始值设置成多少,都是错的。
    回复 有任何疑惑可以回复我~ 2019-08-05 14:45:44
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信