去除字符串中重復字符

題目

設計算法并寫出代碼移除字符串中重復的字符,不能使用額外的緩存空間。注意: 可以使用額外的一個或兩個變量,但不允許額外再開一個數組拷貝。

進一步地,

為你的程序寫測試用例。

解答

這道題目其實是要你就地(in place)將字符串中重復字符移除。你可以向面試官問清楚, 不能使用額外的一份數組拷貝是指根本就不允許開一個數組,還是說可以開一個固定大小, 與問題規模(即字符串長度)無關的數組。

如果根本就不允許你再開一個數組,只能用額外的一到兩個變量。那么,你可以依次訪問 這個數組的每個元素時間復雜度為O(n2?),代碼如下:

#include<iostream>
#include<cstring>
using namespace std;void removeDuplicate(char *str)
{if(str==NULL)return;int count=0;int n=strlen(str);for(int i=1;i<n;++i){int j=i-1;while(j>=0){if(str[i]==str[j]){++count;break;}else--j;}if(j<0)str[i-count]=str[i];}str[n-count]='\0';
}int main()
{char str[]="";removeDuplicate(str);cout<<str<<endl;
}

如果可以開一個固定大小,與問題規模(即字符串長度)無關的數組,那么可以用一個數組來 表征每個字符的出現(假設是ASCII字符,則數組大小為256),這樣的話只需要遍歷一遍字符 串即可,時間復雜度O(n)。代碼如下:

void removeDuplicate(char s[])
{int len = strlen(s);if(len < 2) return;bool c[256];memset(c, 0, sizeof(c));int p = 0;for(int i=0; i < len; ++i){if(!c[s[i]]){s[p++] = s[i];c[s[i]] = true;}}s[p] = '';    
}

?

轉載于:https://www.cnblogs.com/wuchanming/p/4447792.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375111.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375111.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375111.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MyEclipse 6.5安裝maven插件

MyEclipse 6.5安裝maven插件 原文 http://www.blogjava.net/caojianhua/archive/2013/11/05/406013.html 一、卸載原有maven插件 MyEclipse 6.5集成了Maven插件&#xff0c;不過有不少bug&#xff0c;用習慣了m2eclipse&#xff0c;不想在這上面浪費時間。要安裝m2eclipse&…

兩列右側自適應布局--(來自網易)

<div class"g-bd1 f-cb"><div class"g-sd1"><p>左側定寬</p></div><div class"g-mn1"><div class"g-mn1c"><p>右側自適應</p></div></div> </div> /* 兩列右…

Gradle 筆記

網上有一篇文章說的很明白&#xff0c;圖文來教你在eclipse下用gradle 來打包Androidhttp://blog.csdn.net/x605940745/article/details/41242687 步驟為&#xff1a; 1. Elipse里面導出&#xff0c;Generate Gradle build files 2. 找到生成的gradle文件夾&#xff0c;里面有…

sql server 自定義函數的使用

sql server 自定義函數的使用自定義函數 用戶定義自定義函數像內置函數一樣返回標量值&#xff0c;也可以將結果集用表格變量返回 用戶自定義函數的類型: 標量函數:返回一個標量值 表格值函數{內聯表格值函數、多表格值函數}:返回行集&#xff08;即返回多個值&#xff09; 1、…

怎么設置才能讓外網ip可以訪問mysql數據庫[轉]

轉自&#xff1a; http://www.hongyanliren.com/89.html 使用mysql中&#xff0c;很多人都會遇到這樣的問題&#xff1a;在vps服務器或者云服務器上安裝了mysql后&#xff0c;使用其他工具在外網ip之下根本就連接不上mysql&#xff0c;到底是什么原因導致外網ip無法訪問mysql數…

Java 自帶MD5 校驗文件

http://www.iteye.com/topic/1127319 前天第一次發表博客到論壇&#xff0c;關于Java文件監控一文&#xff0c;帖子地址在&#xff1a;http://www.iteye.com/topic/1127281 評論的朋友很多&#xff0c;下載代碼的朋友很不少&#xff0c;感謝在論壇上看我帖子的朋友&#xff0c;…

決策樹資料匯總

2012年8月26日決策樹&#xff08;Decision tree&#xff09;決策樹是以實例為基礎的歸納學習算法。它從一組無次序、無規則的元組中推理出決策樹表示形式的分類規則。它采用自頂向下的遞歸方式&#xff0c;在決策樹的內部結點進行屬性值的比較&#xff0c;并根據不同的屬性值從…

metasploitable2滲透測試

一、系統弱密碼登錄 1、在kali上執行命令行telnet 192.168.26.129 2、Login和password都輸入msfadmin 3、登錄成功&#xff0c;進入系統 4、測試如下&#xff1a; 二、MySQL弱密碼登錄&#xff1a; 1、在kali上執行mysql –h 192.168.26.129 –u root 2、登錄成功&#…

Portainer.io:讓容器管理變得更加直觀

在現代軟件開發和部署中&#xff0c;容器化技術已經變得越來越流行。Docker 是其中一種領先的容器化平臺&#xff0c;而 Portainer.io 則是一個優秀的管理工具&#xff0c;使得 Docker 的使用變得更加簡單和可視化。本文將介紹 Portainer.io 的基本功能和如何在 Docker 上安裝和…

倉庫信息查詢練習

use cangku create table cangkubiao ( cno varchar(50) primary key not null, city varchar(50)not null, mianji int not null ) insert into cangkubiao values(wh1,北京,370) insert into cangkubiao values(wh2,上海,500) insert into cangkubiao values(wh3,廣州,200) …

python開發的一些tips

1. Notepad編寫python腳本 1&#xff09;新建文件&#xff0c;編寫代碼 2&#xff09;點擊菜單欄&#xff0c;“語言”—>“P”—>“Python”&#xff0c;設置腳本為Python語言的高亮&#xff08;這樣保存文本的時候&#xff0c;Notepad也可以自動識別文件類型為.py&…

metasploitable3滲透測試

1、攻擊windows服務器漏洞 用nmap對網段進行掃描nmap -sP 192.168.123 在進行IP掃描 發現Windows服務器漏洞 步驟: msfconsole---進入滲透模塊

以前寫的一個下載小說的工具

因為當時發現只有一個站點有。但是時時聯網的要求太讓人不爽。就寫了一個給全下下來了。 用到了: 1. 正則表達式&#xff0c;分析章節和內容&#xff1b; 2. 線程池下載&#xff0c;并且對下載中的相關超時做了一些處理&#xff1b; 3. 文件生成與寫入&#xff0c;注意格式問題…

數學之路-python計算實戰(14)-機器視覺-圖像增強(直方圖均衡化)

我們來看一個灰度圖像&#xff0c;讓表示灰度出現的次數&#xff0c;這樣圖像中灰度為 的像素的出現概率是是圖像中全部的灰度數&#xff0c; 是圖像中全部的像素數, 實際上是圖像的直方圖&#xff0c;歸一化到 。把 作為相應于 的累計概率函數, 定義為&#xff1a;是圖像的…

Windows2008的安裝

點擊下一步 點擊安裝 選擇第三個&#xff0c;點擊下一步 點擊下一步 點自定義安裝 我在這里分兩個盤并格式化 接下來就是等待安裝完成即可

Ubuntu下在Apache中運行Keystone

最近一次從Github上更新Keystone的代碼后,發現原來bin/keystone-all和bin/keystone-manage都不見了,取而代之的是keystone/cmd/目錄下的all.py和manage.py兩個python腳本.雖然在測試的virtualenv環境下仍然可以執行原來的命令,但是想試著在Apache中運行Keystone,畢竟這已經是社…

redhat linux7.0的安裝

選擇第一個 我選擇中文 點擊開始安裝 設置root用戶密碼 完成如上圖所示 我在網上找了一個redhat7.0鏡像供大家使用 鏈接&#xff1a;https://pan.baidu.com/s/1WhG8BGZTZawDKTNlaAvzRg 提取碼&#xff1a;uzpd

鳥哥

bc計算器 scale4 小數是4位 whatis ls make what is ls --helpman lsman -k passinfo pass [rootcentos01 ~]# ls /etc/init.d/ #服務所在的文件夾 [rootcentos01 ~]# runlevel #查找自己在哪個級別 n 表示上一個沒有N 5-bash-4.1# init 3 #切換到3級別的服務 級別0 關機模式級…

[奇葩 bug]視圖在 ipad5 上正常顯示,在 iPad3上超出了邊界

一,問題分析 1.理論上 iPad 是按像素點排列的,可 iPad5為什么和 iPad3差別那么大??? 2.iPad3超出邊界的視圖,都有一個 leading 是superview 的 leading 加上-20.感覺是這個地方有問題. 3.重新添加一下約束,去掉了那個默認的 constraint 選項,就沒有那個-20的差值了.運行后發…

VMware虛擬機安裝

創建新的虛擬機&#xff1a;在 VMWare 中創建虛擬機&#xff0c;要求設置內存大小為 1G&#xff0c;CPU 為 2&#xff0c;硬盤大小自行選擇&#xff0c;網絡連接采用 NAT 模式&#xff0c;其他保持默認即可 上面是安裝啥系統就選啥系統 下一步 下一步 磁盤大小按自己需求來