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

删除重复字符

本文链接:https://blog.csdn.net/weixin_42449444/article/details/86186192 题目描述: 牛牛有一个由小写字母组成的字符串s,在s中可能有一些字母重复出现...但是牛牛不喜欢重复。对于同一个字母,他只想保留第一次出现并删除掉后面出现的字母。请帮助牛牛完成对s的操作。...输入描述: 输入包括一个字符串s,s的长度length(1 ≤ length ≤ 1000),s中的每个字符都是小写的英文字母('a' - 'z') 输出描述: 输出一个字符串,表示满足牛牛要求的字符串...输入样例: banana 输出样例: ban 解题思路: 保留第一次出现并删除后面出现的字母,说白了就是每个字母只输出一次。无脑用for-each遍历字符串,map来记录每个字母的出现次数。...//把这个字符记录为已输出 } } return 0; }

1.7K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    无重复字符的最长子串(C语言)

    无重复字符的最长子串(C语言) 一、题目描述 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。...示例 1: 输入: s = “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。...示例 2: 输入: s = “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。...二、解题思路 1、使用count记录无重复子串的长度 2、start记录当前子串起始位置下标 3、max记录最大子串长度 4、使用index的值记录当前字符在字符串中的位置坐标 5、遍历字符串...s 6、若字符串无重复字符,返回count,即当前字符串长度 7、若有重复字符,则改变子串起始位置start的值为当前字符上一次出现的位置下标 8、比较count与max的值,记录最大子串长度。

    58410

    删除字符串中的所有相邻重复项

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

    4.8K55

    C语言每日一题(38)无重复字符的最长字串

    力扣 3 无重复字符的最长字串 题目描述 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。...示例 2: 输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。...(考虑窗口里的每一个字符不重复),我们可以用一个非常巧妙的思路 这个思路利用了关于哈希算法以及字符的ascii编码来进行。...随后开始遍历整个字符串,这里需要两层循环,利用每一个字符的ascii编码当作数组的下标,如果下标对应的值为零,我们设置为1,并进入下面if语句的运行,如果下一个字符和它相等,就不会进入接下来的判断,这是判断不出现重复字符的方法...关于求最长的字串长度,我们利用两个下标,从第一个字符开始,如果接下来的字符对应的下标的数组为0就进入if语句,此时遍历的两个下标的差值在加上原来的第一个字符(也算不重复的字串)便是不出现重复字符字串的长度

    20110

    C语言每日一题(68)无重复字符的最长字串

    题目描述 给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度。...示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子字符串是 "abc",所以其长度为 3。...示例 2: 输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子字符串是 "b",所以其长度为 1。...1.首先如何判断我们取得的字串内有重复字符,利用哈希表,将每一个进窗口的字符进入哈希表,每当新字符进入时就判断一下哈希表上对应的值是否存在。...2.如果存在的话,此时就要出窗口,将left不断右移,每右移一个,就将对应字符的哈希表减1,直到重复字符的哈希表值为1即可。 3.此时更新结果。

    10410

    刷题第3篇:重复字符串的删除

    题目描述 LeetCode----T1209 给你一个字符串 s,「k 倍重复项删除操作」将会从 s 中选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。...你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。在执行完所有删除操作后,返回最终得到的字符串。本题答案保证唯一。 示例如下所示: ?...解题思路 当时看到这道题的第一印象,觉得就是循环遍历,直到没有可以再次删除的重复字符串为止。但是这样会出现一种浪费,每一次的遍历只能删除当前字符串中连接在一起的字符串。...比如,K=3,S=“aabbdddbcceeecf”,当我们第一次进行遍历的时候,只能后删除“ddd”和“eee”,然后得到一个新的字符串,再去删除新字符串中剩下的重复字符串。...于是我们可以从新的容器中获取每个字符已经重复的次数,当此字符的重复次数等于k的时候,则进行删除操作。

    1.9K10

    C语言每日一题(21)删除排序数组中的重复项

    力扣 26.删除排序数组中的重复项 题目描述 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。...元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。...考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过: 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。...nums 的其余元素与 nums 的大小不重要。 返回 k 。...思路分析 基于双指针法,用下标进行代替,从数组最左端开始,遍历整个数组,下标1如果不等于下标2就把下标1指向的值赋给下标2,同时继续向后遍历完整个数组,最后返回下标2的值(即去重后数组的长度) 整体步骤

    19310

    删除有序数组中的重复项(C++)

    删除有序数组中的重复项 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。...由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。...将最终结果插入 nums 的前 k 个位置后返回 k 。 不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。...判题标准: 系统会用下面的代码来测试你的题解: int[] nums = [...]; // 输入数组 int[] expectedNums = [...]; // 长度正确的期望答案 int k =...示例 1: 输入: nums = [1,1,2] 输出: 2, nums = [1,2,_] 解释: 函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。

    4500

    C语言删除无序整型数组中的重复元素及时间复杂度

    遇到一个题,大概要求是写一个函数处理来去掉一个无序的整型数组(例如int i_arr[] = { 1, 2, 2, 3, 4, 2, 3, 5 };)中重复的元素,并返回最终的长度。...1 思路 看到这道题的时候,第一反应就是需要删除元素,然后联想到单链表。但是后面一想还是不划算,因为单链表还得先把数组中的元素遍历到链表节点中。...换一下思路,可以先创建另一个整型数组(大小和原数组一样),然后正向遍历数组中的元素,比较当前元素和它前面所有的元素是否重复,如果这个整数之前没有出现过,那么就放到新的数组中,于是有了小节2中的Method1...;另外一种就是不需要创建新的数组,在正向遍历数组中的元素时,比较当前元素和它后面所有的元素是否重复,如果重复就把后面的所有元素向前移动(即覆盖),于是有了小节2中的Method2。...2 完整程序 程序中第104行的--j语句非常重要,这是为了避免当前元素连续出现3次(或以上)而没有被删除。

    28110

    C语言每日一题(44)删除排序链表中的重复元素 II

    力扣 82 删除排序链表中的重复元素 II 题目描述 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。...,那如果有重复元素的话他一定是放在一起的,也就是连续的,所以我们从头结点和它的下一个开始,如果相等的话,我们就将后面的链表向前移动进行覆盖实现删除,直到两个不等时继续遍历到链表结束。...为了方便扫描所有结点的值,我们定义一个哨兵位,从哨兵位开始遍历,返回时指向哨兵位的下一位就是头结点了。...while(cur->next&&cur->next->val==x)//如果cur的下一个的值等于刚刚保留的x,就删,直到next的值不等于x就停下...{ cur->next=cur->next->next;//进行删除,将next的next赋给next实现覆盖删除 } }

    14710
    领券