From 047cd5b172ead356dd894fdb16c84ad799f15dd8 Mon Sep 17 00:00:00 2001 From: huangge1199 Date: Wed, 1 Sep 2021 16:39:01 +0800 Subject: [PATCH] =?UTF-8?q?424:=E6=9B=BF=E6=8D=A2=E5=90=8E=E7=9A=84?= =?UTF-8?q?=E6=9C=80=E9=95=BF=E9=87=8D=E5=A4=8D=E5=AD=97=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LongestRepeatingCharacterReplacement.java | 56 +++++++++++++++++++ .../LongestRepeatingCharacterReplacement.md | 24 ++++++++ .../editor/cn/doc/note/ContainsDuplicateIi.md | 20 +++++++ 3 files changed, 100 insertions(+) create mode 100644 src/main/java/leetcode/editor/cn/LongestRepeatingCharacterReplacement.java create mode 100644 src/main/java/leetcode/editor/cn/doc/content/LongestRepeatingCharacterReplacement.md create mode 100644 src/main/java/leetcode/editor/cn/doc/note/ContainsDuplicateIi.md diff --git a/src/main/java/leetcode/editor/cn/LongestRepeatingCharacterReplacement.java b/src/main/java/leetcode/editor/cn/LongestRepeatingCharacterReplacement.java new file mode 100644 index 0000000..c80ca9c --- /dev/null +++ b/src/main/java/leetcode/editor/cn/LongestRepeatingCharacterReplacement.java @@ -0,0 +1,56 @@ +//给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。 +// +// +// 注意:字符串长度 和 k 不会超过 10⁴。 +// +// +// +// 示例 1: +// +// +//输入:s = "ABAB", k = 2 +//输出:4 +//解释:用两个'A'替换为两个'B',反之亦然。 +// +// +// 示例 2: +// +// +//输入:s = "AABABBA", k = 1 +//输出:4 +//解释: +//将中间的一个'A'替换为'B',字符串变为 "AABBBBA"。 +//子串 "BBBB" 有最长重复字母, 答案为 4。 +// +// Related Topics 哈希表 字符串 滑动窗口 👍 476 👎 0 + +package leetcode.editor.cn; + +//424:替换后的最长重复字符 +class LongestRepeatingCharacterReplacement { + public static void main(String[] args) { + //测试代码 + Solution solution = new LongestRepeatingCharacterReplacement().new Solution(); + } + + //力扣代码 + //leetcode submit region begin(Prohibit modification and deletion) + class Solution { + public int characterReplacement(String s, int k) { + int[] num = new int[26]; + int max = 0; + int index = 0; + for (int i = 0;i k) { + num[s.charAt(index) - 'A']--; + index++; + } + } + return s.length() - index; + } + } +//leetcode submit region end(Prohibit modification and deletion) + +} \ No newline at end of file diff --git a/src/main/java/leetcode/editor/cn/doc/content/LongestRepeatingCharacterReplacement.md b/src/main/java/leetcode/editor/cn/doc/content/LongestRepeatingCharacterReplacement.md new file mode 100644 index 0000000..e9b5413 --- /dev/null +++ b/src/main/java/leetcode/editor/cn/doc/content/LongestRepeatingCharacterReplacement.md @@ -0,0 +1,24 @@ +

给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 次。在执行上述操作后,找到包含重复字母的最长子串的长度。

+ +

注意:字符串长度 和 k 不会超过 104

+ +

 

+ +

示例 1:

+ +
+输入:s = "ABAB", k = 2
+输出:4
+解释:用两个'A'替换为两个'B',反之亦然。
+
+ +

示例 2:

+ +
+输入:s = "AABABBA", k = 1
+输出:4
+解释:
+将中间的一个'A'替换为'B',字符串变为 "AABBBBA"。
+子串 "BBBB" 有最长重复字母, 答案为 4。
+
+
Related Topics
  • 哈希表
  • 字符串
  • 滑动窗口

  • 👍 476
  • 👎 0
  • \ No newline at end of file diff --git a/src/main/java/leetcode/editor/cn/doc/note/ContainsDuplicateIi.md b/src/main/java/leetcode/editor/cn/doc/note/ContainsDuplicateIi.md new file mode 100644 index 0000000..5b62de8 --- /dev/null +++ b/src/main/java/leetcode/editor/cn/doc/note/ContainsDuplicateIi.md @@ -0,0 +1,20 @@ +

    思路:

    +

    将每个元素与其后的k个元素依次比较,看看他们是不是相等

    +

    由于题目没有给出k的范围,要注意先判断k的大小,如果k小于等于0,结果必然返回false

    +

    代码:

    +
    +public boolean containsNearbyDuplicate(int[] nums, int k) {
    +    if (k <= 0) {
    +        return false;
    +    }
    +    for (int i = 0; i < nums.length; i++) {
    +        for (int j = i + 1; j <= Math.min(i + k, nums.length - 1); j++) {
    +            if (nums[i] == nums[j]) {
    +                return true;
    +            }
    +        }
    +    }
    +    return false;
    +}
    +
    + \ No newline at end of file