首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Java中删除字符串中的相邻重复项

在Java中删除字符串中的相邻重复项可以通过使用StringBuilder来实现。以下是实现该功能的示例代码:

代码语言:txt
复制
public class RemoveDuplicates {
    public static void main(String[] args) {
        String str = "abbaca";
        String result = removeAdjacentDuplicates(str);
        System.out.println(result); // 输出 "ca"
    }
    
    public static String removeAdjacentDuplicates(String str) {
        StringBuilder sb = new StringBuilder();
        
        for (char c : str.toCharArray()) {
            int length = sb.length();
            
            // 检查StringBuilder的末尾字符是否与当前字符相同
            if (length > 0 && sb.charAt(length - 1) == c) {
                sb.deleteCharAt(length - 1); // 删除相同的字符
            } else {
                sb.append(c); // 添加不同的字符
            }
        }
        
        return sb.toString();
    }
}

这段代码中,我们使用了StringBuilder类来构建新的字符串。遍历输入字符串中的每个字符,检查StringBuilder的末尾字符是否与当前字符相同。如果相同,则删除StringBuilder末尾的字符;如果不同,则将当前字符添加到StringBuilder中。最后,将StringBuilder转换为String并返回。

该方法的时间复杂度为O(n),其中n是输入字符串的长度。

推荐的腾讯云相关产品:无

注意:由于要求不能提及亚马逊AWS、Azure、阿里云、华为云、天翼云、GoDaddy、Namecheap、Google等流行的一些云计算品牌商,故没有提供相关产品和产品介绍链接。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

删除字符串所有相邻重复

例子 输入: "abbaca" 输出: "ca" 解释: 例如,在 "abbaca" ,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作重复。...之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复删除操作,所以最后字符串为 "ca"。...解题思路 栈方法 比较典型一道栈方法题目 可以通过栈 后进先出 思路进行求解 由于最后结果返回字符串, 那么我们用字符串代替栈数组进行求解 例如: s = "abbaca", result...= "", 循环s每一个字符判断 i 是否与result最后一个字符相等, 相等移除最后一个字符, 不相等result添加i 第一次循环: i = a, result = "a" 第二次循环:...removeDuplicates(_ S: String) -> String { // 定义result var result = "" // 循环S每一个字符

4.8K55

LeetCode - 删除字符串所有相邻重复

S,重复删除操作会选择两个相邻且相同字母,并删除它们。...在 S 上反复执行重复删除操作,直到无法继续删除。 在完成所有重复删除操作后返回最终字符串。答案保证唯一。...示例: 输入:"abbaca" 输出:"ca" 解释: 例如,在 "abbaca" ,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作重复。...之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复删除操作,所以最后字符串为 "ca"。 提示: 1 <= S.length <= 20000 S 仅由小写英文字母组成。...首先将输入字符串包装为StringBuilder对象,然后一直从头遍历StringBuilder对象,找到重复字符串,就把这两个重复删除删除之后,再从头遍历该StringBuilder对象,直到遍历

3K20
  • 删除字符串所有相邻重复

    删除字符串所有相邻重复 官方题解链接: 删除字符串所有相邻重复 题目 给出由小写字母组成字符串 S,重复删除操作会选择两个相邻且相同字母,并删除它们。...在 S 上反复执行重复删除操作,直到无法继续删除。 在完成所有重复删除操作后返回最终字符串。答案保证唯一。...示例: 输入:"abbaca" 输出:"ca" 解释: 例如,在 "abbaca" ,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作重复。...之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复删除操作,所以最后字符串为 "ca"。 提示: 1 <= S.length <= 20000 S 仅由小写英文字母组成。...删除字符串所有相邻重复 删除字符串所有相邻重复

    2K20

    删除字符串所有相邻重复

    删除字符串所有相邻重复 力扣题目链接[1] 给出由小写字母组成字符串 S,重复删除操作会选择两个相邻且相同字母,并删除它们。 在 S 上反复执行重复删除操作,直到无法继续删除。...在完成所有重复删除操作后返回最终字符串。答案保证唯一。...示例1: 输入:"abbaca" 输出:"ca" 解释: 例如,在 "abbaca" ,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作重复。...之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复删除操作,所以最后字符串为 "ca"。 「提示:」 1 <= S.length <= 20000 S 仅由小写英文字母组成。...最终剩下元素所拼接成字符串就是没有相邻结果。这里每次循环都弹出一个字符,用来判断与接下来需要比较字符是否相等,如果相等则全部丢弃,继续判断下一个字符,如果不相等则按照顺序全部放入栈

    1.7K20

    删除字符串所有相邻重复 II

    删除字符串所有相邻重复 II 给你一个字符串 s,「k 倍重复删除操作」将会从 s 中选择 k 个相邻且相等字母,并删除它们,使被删去字符串左侧和右侧连在一起。...你需要对 s 重复进行无限次这样删除操作,直到无法继续为止。 在执行完所有删除操作后,返回最终得到字符串。 本题答案保证唯一。...不同是,这里是删除相邻重复k次。...那么可以这么做: 遍历字符串每个字符元素, 如果栈为空,则直接放入栈; 如果栈顶元素不等于当前元素,那么意味着不重复,则将元素放入栈; 如果栈顶元素等于当前元素,但是栈顶元素字符串长度小于...k - 1,则依旧不构成重复条件;因为算上当前元素加上k - 1才能达到相邻k要求,因此将当前元素拼接到栈顶字符串后面,等待后续元素,如果后续元素刚好等于这个元素,就达到了消除条件; 如果栈顶元素等于当前元素

    1.5K30

    删除字符串所有相邻重复

    删除字符串所有相邻重复) https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/ 题目描述 给出由小写字母组成字符串... S,重复删除操作会选择两个相邻且相同字母,并删除它们。...在 S 上反复执行重复删除操作,直到无法继续删除。 在完成所有重复删除操作后返回最终字符串。答案保证唯一。  ...示例: 输入:"abbaca" 输出:"ca" 解释: 例如,在 "abbaca" ,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作重复。...之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复删除操作,所以最后字符串为 "ca"。

    1.4K20

    删除字符串所有相邻重复

    1 题目描述 给出由小写字母组成字符串 S,重复删除操作会选择两个相邻且相同字母,并删除它们。 在 S 上反复执行重复删除操作,直到无法继续删除。 在完成所有重复删除操作后返回最终字符串。...2 题目示例 输入:“abbaca” 输出:“ca” 解释: 例如,在 “abbaca” ,我们可以删除 “bb” 由于两字母相邻且相同,这是此时唯一可以执行删除操作重复。...之后我们得到字符串 “aaca”,其中又只有 “aa” 可以执行重复删除操作,所以最后字符串为 “ca”。...4 思路 充分理解题意后,我们可以发现,当字符串同时有多组相邻重复时,我们无论是先删除哪一个,都不会影响最终结果。因此我们可以从左向右顺次处理该字符串。...而消除—对相邻重复可能会导致新相邻重复出现,如从字符串abba 删除bb会导致出现新相邻重复aa出现。因此我们需要保存当前还未被删除字符。一种显而易见数据结构呼之欲出:栈。

    99820

    【Leetcode -844.比较含退格字符串 -1047.删除字符串所有相邻重复

    Leetcode -844.比较含退格字符串 题目:给定 s 和 t 两个字符串,当它们分别被输入到空白文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。...strcmp(stackS, stackT); } Leetcode -1047.删除字符串所有相邻重复 题目:给出由小写字母组成字符串 S,重复删除操作会选择两个相邻且相同字母,并删除它们...在 S 上反复执行重复删除操作,直到无法继续删除。 在完成所有重复删除操作后返回最终字符串。答案保证唯一。...示例: 输入:“abbaca” 输出:“ca” 解释: 例如,在 “abbaca” ,我们可以删除 “bb” 由于两字母相邻且相同,这是此时唯一可以执行删除操作重复。...之后我们得到字符串 “aaca”,其中又只有 “aa” 可以执行重复删除操作,所以最后字符串为 “ca”。 提示: 1 <= S.length <= 20000 S 仅由小写英文字母组成。

    10510

    删除排序数组重复

    给定一个排序数组,你需要在 原地 删除重复出现元素,使得每个元素只出现一次,返回移除后数组新长度。不要使用额外数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间条件下完成。...示例 1: 给定数组 nums = [1,1,2], 函数应该返回新长度 2, 并且原数组 nums 前两个元素被修改为 1, 2。 你不需要考虑数组超出新长度后面的元素。...你不需要考虑数组超出新长度后面的元素。...---- 问题信息 输入:已排好序数组 输出:去重后新数组长度 额外条件:不创建额外空间直接修改原数组去重,不考虑新数组长度之后元素 思考 很显然需要遍历扫描重复,在元素不同时候设置值。...那么需要两个指针比较,一个指针i功能是用来存去重值,因此第二个指针j扫面全部与i判断是否重复若不重复则i指针要移动并存下该值。

    5K20

    删除排序数组重复

    题目 给你一个有序数组 nums ,请你 原地 删除重复出现元素,使每个元素 只出现一次 ,返回删除后数组新长度。...不要使用额外数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间条件下完成。...示例 输入:nums = [1,1,2] 输出:2, nums = [1,2] 解释:函数应该返回新长度 2 ,并且原数组 nums 前两个元素被修改为 1, 2 。...不需要考虑数组超出新长度后面的元素。 思路分析 题目中给了个关键信息是有序数组,所以相同元素肯定是挨着。所以我们只需要遍历整个数组,然后前后两两比较,如果有相同就把后面的元素给前面的赋值。...这里采用双指针算法: ① 初始状态:左指针l指向nums[0],右指针指向nums[1] ② 判断nums【l】是否等于nums【r】 ③ 若想等,先将左指针右移,再用nums【r】把nums【l】覆盖 ④ 整个过程右指针每次执行完都往右移继续循环

    4.3K30

    删除排序数组重复

    题目 难度级别:简单 给定一个排序数组,你需要在 原地 删除重复出现元素,使得每个元素只出现一次,返回移除后数组新长度。...你不需要考虑数组超出新长度后面的元素。 说明 为什么返回数值是整数,但输出答案是数组呢? 请注意,输入数组是以「引用」方式传递,这意味着在函数里修改输入数组对于调用者是可见。...// 根据你函数返回长度, 它会打印出数组该长度范围内所有元素。...这里需要注意是,若我们顺序遍历的话,若遇到重复值,删除以后,这时我们下一次遍历会直接被跳过,因为删除以后下一值变为当前项了,但是下一次我们遍历是第i+1。...所以需要逆序遍历数组删除重复,这样不会影响下一次遍历。

    4.5K30

    删除有序数组重复

    给你一个 升序排列 数组 nums ,请你 原地 删除重复出现元素,使每个元素 只出现一次 ,返回删除后数组新长度。元素 相对顺序 应该保持 一致 。然后返回 nums 唯一元素个数。...考虑 nums 唯一元素数量为 k ,你需要做以下事情确保你题解可以被通过: 更改数组 nums ,使 nums 前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现顺序排列。...nums 其余元素与 nums 大小不重要。 返回 k 。...[l++] = nums[r];//若不等于,即说明快指针找到了下一个不同元素位置,将其归并到已排列元素(即不同元素组合)当中,称为不同元素组合当中最后一位,并将慢指针加1,给下一个不同元素预留位置...} return l;//因为l最后代表是不同元素组合最后一位元素下标加1,表明不同元素最后一位下标为l-1,而数组是从0开始计数,所以最后不同元素共有(l-1)+ 1 =

    18020

    【一天一道Leetcode】删除字符串相邻重复

    题目描述: 给出由小写字母组成字符串 S,重复删除操作会选择两个相邻且相同字母,并删除它们。 在S上反复执行重复删除操作, 直到无法继续删除。 在完成所有重复删除操作后返回最终字符串。...示例: 输入:"abbaca" 输出:"ca" 解释: 在 "abbaca" , 我们可以删除 "bb" 由于两字母相邻且相同, 这是此时唯一可以执行删除操作重复。...之后我们得到字符串 "aaca", 其中又只有 "aa" 可以执行重复删除操作, 所以最后字符串为 "ca"。 提示: 1. 1 <= S.length <= 20000 2....(注意:是需要删除两个相同字符) 2.删除字符串两个相邻并且相同字符可能会产生新相邻并且相同字符。 比如题目中"abbaca"。...删除bb后,会产生新字符串aaca, 此时也需要将aa删除 最后字符串为ca 我们根据要点可知,并不能一次字符串删除操作就达到最终目的,我们需要每次删除完一对相邻相同字符后,再看新字符串是否存在相邻相同一对字符

    1.9K00

    删除有序数组重复(java)

    二、题目描述: 题目:  ​​升序排列​​ 数组 nums ,请你 原地 删除重复出现元素,使每个元素 只出现一次 ,返回删除后数组新长度。元素 相对顺序 应该保持 一致 。        ...由于在某些语言中不能改变数组长度,所以必须将结果放在数组nums第一部分。        更规范地说,如果在删除重复之后有 k 个元素,那么 nums 前 k 个元素应该保存最终结果。...不需要考虑数组超出新长度后面的元素。...,一下子就愣住了,但仔细分析题意可得: 数组是有序,那么重复元素一定会相邻。...要求删除重复元素,实际上就是将不重复元素移到数组左侧。         所以实现方法很简单:直接采用快慢指针进行遍历替换,最后将慢指针low输出即是题案。

    31820
    领券