3.去除字符串中重复的字符

O(n^2)的解决方式:

只能用额外的两个变量,可以依次的访问数组的每个元素,每访问一个,就将从当前到末尾的重复字符(置换为 ‘ ‘)

核心代码:

 1 void removeChar(char s[])
 2 {
 3     int len = strlen(s);
 4     if(len < 2) return;
 5     int p = 0;
 6     int i = 0,j = 0;
 7     for(i = 0;i < len; ++i)
 8     {
 9         if(s[i] != ‘‘)
10         {
11             s[p++] = s[i];
12             for(j = i+1;j < len; ++j)
13                 if(s[j] == s[i])
14                 s[j] = ‘‘;
15         }
16     }
17     s[p] = ‘‘;
18 }

O(n)的解决方式:

需要开辟额外的数组,用来记录字符出现的次数

核心代码:

 1 void removeChar(char s[])
 2 {
 3     int len = strlen(s);
 4     if(len < 2) return;
 5     bool c[256];
 6     memset(c,0,sizeof(c));
 7     int p = 0;
 8     int i = 0;
 9     for(i = 0;i < len; ++i)
10     {
11         if(!c[s[i]])
12         {
13             s[p++] = s[i];
14             c[s[i]] = true;
15         }
16     }
17     s[p] = ‘‘;
18 }
时间: 2024-10-24 17:54:00

3.去除字符串中重复的字符的相关文章

[算法]删除字符串中重复的字符

如何删除字符串中重复的字符 问题描述: 删除字符串中重复的字符,例如,"good"去掉重复的字符串后就变成"god". 第一种方法: "蛮力法",最简单的方法就是把这个字符串看作是一个字符数组,对该数组使用双重循环进行遍历,如果发现有重复的字符,就把该字符置为'\0',最后再把这个字符数组中所有的'\0'去掉,此时得到的字符串就是删除重复字符后的目标字符串. 代码如下: package 删除字符串中重复的字符; public class Solu

C语言去除数组中重复的字符简单例子

#include <stdio.h> int main(void){ int a[10]={1,2,3,3,4,5,1,3,5,6}; int i,j; int zieo=0; for(i=0;i<10;i++) for(j=i+1;j<10;j++) { if(a[i]==a[j]) { a[j]=0; } } for(i=0;i<10;i++) { if(a[i]!=zieo) { printf("%d\t",a[i]); } } printf(&qu

javascript删除字符串中重复的字符

javascript删除字符串中重复的字符:本章节介绍一下如何删除一个字符串中重复的字符,先不管有没有实际价值,就当做是一种对算法的学习也是挺不错的.代码如下: function dropRepeat(str){ var result=[]; var hash={}; for(var i=0, elem; i<str.length;i++){ elem=str[i]; if(!hash[elem]){ hash[elem]=true; result=result+elem; } } return

《剑指Offer》:移除字符串中重复的字符_2

题目 移除字符串中重复的字符,字符串由小写字母构成 如abcadc移除后变为abcd, 要求:时间复杂度尽可能小 与上篇博文(http://blog.csdn.net/u010412719/article/details/48086641)不一样的地方是:虽然都是移除字符串中重读的字符,但是这里的要求是时间复杂度尽可能小,对空间没有要求. 思路 思路:要求时间复杂度尽可能小而对空间没有限制,这就需要我们用控件换取时间 /* 移除字符串中重复的字符,字符串由小写字母构成 如abcadc移除后变为a

《剑指Offer》:移除字符串中重复的字符

题目: 移除字符串中重复的字符, 如abcadc移除后变为abcd, 注意:可以额外定义一两个变量,但不允许额外开辟一个数组. 思路 这里要求了空间复杂度为O(1),那我们只能用最简单的遍历方法,先让第一个字符与后面的字符一一比较,遇到重复的就把重复的字符用'\0'替换掉,再让第二个字符与右面的字符一一比较,遇到重复的,就把重复的字符用'\0'代替,如此循环,直到最后一个字符,当然同时还要在每次遇到'\0'时(重复字符出现的位置,已被填充为'\0'),将后面的字符移到前面来,替换掉'\0',最后

java去除字符串中重复、不重复、消除重复后字符

import java.util.HashSet;import java.util.Set; public class Main { public static void main(String[] args) { String str = "aaasd"; System.out.println("原字符串: "+str); Set<Character> set1 = new HashSet<Character>(); Set<Char

ios 开发中获取字符串中重复的字符的rang

iOS 开发中经常会遇到处理字符串的问题,对于一个字符串经常会遇见里面包含重复的字符需要对重复的字符进行处理,下面的代码就是对重复字符进行处理的操作,具体代码如下所示: /** * 返回重复字符的location * * @param text 初始化的字符串 * @param findText 查找的字符 * * @return 返回重复字符的location */ - (NSMutableArray *)getRangeStr:(NSString *)text findText:(NSStr

删除字符串中重复的字符

描述 分析 方法一,蛮力法.两个循环,大循环每次从数组中取出一个字符,小循环重新遍历该数组是否含有该字符.方法二:排序法.对两个字符串的字符进行排序,再比较.方法三:空间换时间.acsII共256个字符.使用256bit记录每个字符是否已出现过.遍历字符串,若已出现过则将该字符替换为'\0'方法四:正则表达式."(?s)(.)(?=.*\\1)" 代码 方法三,空间换时间. public class Test { public static String removeDuplucate

去除字符串中的emoji字符

对于使用utf8编码的mysql数据库来说,如果字符串中存在emoji小图像,是不能存进数据库中的,查了一下,原因大概是因为utf8编码可以存1-3个字节的字符,但是emoji是4个字节:解决方法可以把mysql的编码换成utf8mb4,需要相应版本的mysql:另外一种方法是把字符串中所有的emoji给去除掉,然后在存进数据库,具体的方法是: public static String filterEmoji(String source,String slipStr) { if(isNotBla