28.1递归删除子串,并求删除次数

2018-12-25  本文已影响0人  夜空中最亮的星_6c64

题目描述:

给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的【位置】、次数 (从0开始),并删除needle。返回 次数。

示例:

示例 1:

输入: haystack = "hellollo", needle = "ll"
输出:2 5 2或者2 3 2【5是不删除needle,3是删除needle】

示例 2:

输入: haystack = "aaaaa", needle = "bba"
输出: 0 0 0

解答:

package code028_ImplementstrStr;
import java.util.ArrayList;
import java.util.List;
public class BaoyanNo1 {
    public static int strStr(String haystack, String needle) {
        // 子串长度为0,返回0
        if (needle.length() == 0) {
            return 0;
        }
        // 子串或者母串为空,返回-1
        if (haystack == null || needle == null) {
            return -1;
        }
        // 子串的个数
        int j = needle.length(), count = 0;
        List<Integer> location = new ArrayList<>();
        // 循环母串,到子串长度前停止
        for (int h = 0; h < haystack.length() - needle.length() + 1; h++) {
            // 使用substring判断是否有子串;注意左闭右开,右侧需要+1
            // substring长度为:end-begin
            if (haystack.substring(h, j + h).equals(needle)) {
                // 保研机考第一题:递归删除子串【substring】,删除次数【count】;
                count++;
                haystack = haystack.substring(0, h) + haystack.substring(h + j, haystack.length());
                // 删除位置【递归删除子串:位置为新字符串;不递归:位置为原始字符串】
                location.add(h);
            }
        }
        System.out.println(count);
        // 不递归的话,可以replaceAll
        // haystack = haystack.replaceAll(needle, "");
        // 递归删除子串后的字符串
        System.out.println(haystack);
        for (int i = 0; i < location.size(); i++) {
            System.out.print(location.get(i) + ";");
        }
        return count;
    }

    public static void main(String[] args) {
        strStr("hellollo", "ll");
    }
}
上一篇下一篇

猜你喜欢

热点阅读