Skip to content

Latest commit

 

History

History
54 lines (46 loc) · 2.19 KB

leetcode_346.md

File metadata and controls

54 lines (46 loc) · 2.19 KB

leetcode2696

给你一个仅由 大写 英文字符组成的字符串 s 。 你可以对此字符串执行一些操作,在每一步操作中,你可以从 s 中删除 任一个 "AB" 或 "CD" 子字符串。 通过执行操作,删除所有 "AB" 和 "CD" 子串,返回可获得的最终字符串的 最小 可能长度。 注意,删除子串后,重新连接出的字符串可能会产生新的 "AB" 或 "CD" 子串。 https://leetcode.cn/problems/minimum-string-length-after-removing-substrings/description/

class Solution {
    public int minLength(String s) {
        Deque<Character> st = new ArrayDeque<>();

        for (int i = 0; i < s.length(); i ++) {
            char c = s.charAt(i);
            
            if (!st.isEmpty() && ((st.peek() == 'A' && c == 'B') || (st.peek() == 'C' && c == 'D'))) {
                st.pop();
            } else {
                st.push(c);
            }
        }
        return st.size();
    }
}

给你一个由 小写英文字母 组成的字符串 s ,你可以对其执行一些操作。在一步操作中,你可以用其他小写英文字母 替换 s 中的一个字符。 请你执行 尽可能少的操作 ,使 s 变成一个 回文串 。如果执行 最少 操作次数的方案不止一种,则只需选取 字典序最小 的方案。 对于两个长度相同的字符串 a 和 b ,在 a 和 b 出现不同的第一个位置,如果该位置上 a 中对应字母比 b 中对应字母在字母表中出现顺序更早,则认为 a 的字典序比 b 的字典序要小。 返回最终的回文字符串。

https://leetcode.cn/problems/lexicographically-smallest-palindrome/

class Solution {
    public String makeSmallestPalindrome(String s) {
        char[] res = s.toCharArray();

        int n = s.length();
        int cnt = 0;
        for (int i = 0, j = n - 1; i < j; i ++, j --) {
            if (res[i] == res[j]) continue;
            if (res[i] > res[j]) {
                res[i] = res[j];
            } else {
                res[j] = res[i];
            }
            cnt ++;
        }
        return new String(res);
    }
}