strStr

strStr (easy)  

判断源string中是否含有目标string。

For a given source string and a target string, you should output the "first" index(from 0) of target string in source string.

If target is not exist in source, just return -1.


Example

If source="source" and target="target", return -1.

If source="abcdabcdefg" and target="bcd", return 1.

Solution

   public int strStr(String source, String target) {
        if (source == null || target == null) {
            return -1;
        }
        if (target.length() == 0) {
            return 0;
        }
        if (target.length() > source.length()) {
            return -1;
        }
        int sIndex = 0;
        int tIndex = 0;
        while (sIndex < source.length()) {
            if (source.charAt(sIndex) == target.charAt(tIndex)) {
                sIndex++;
                tIndex++;
            } else {
                sIndex++;
                tIndex = 0;
            }
            if (tIndex == target.length()) {
                return sIndex - target.length();
            }
        }
        return -1;
    }
思路

边界条件:

1. 源string和目标string中有null

2. 目标string长度为0

3. 目标string长度大于源string(包含源string为空的情况了,此处有优化,当目标长度大于源长度时,源string一定不会含有目标string)

正常情况:

目标string和源string各有一个指针。依次比较源string与目标string。当目标指针指到目标string末尾后,则比较完成。

类似双指针。sIndex表示source的当前位置,tIndex表示target的当前位置。如果两者的字符一样,则继续比较下一个位置。如果不一样,则tIndex置零,从头开始。当target全部比较完,则说明命中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值