導航:首頁 > 源碼編譯 > 字元串演算法題

字元串演算法題

發布時間:2022-06-14 04:53:08

㈠ 字元串變換問題,運用循環迭代演算法

首先Dictionary類會載入所有詞典,成map結果,以isEnd()標志結束詞。 要分詞的字元串進行預處理,比如大小寫轉換,比如轉碼等等。 輸入字元串以char的形式進行匹配,一個char如果能取到hitList,那麼會鎖定hitList, 循環到第二個char,如果能在hitList里與上一個char匹配成詞(前面載入字典成map結構就用上了),則保存當前的newLexeme,並加入到輸出結果集。判斷是否isEnd(),如果是,則context.currCursor偏移1位,繼續取詞。 以此類推,直到遍歷完這個字元串。 如果要分的詞是中文,樓主可以主要研究CJKSegmenter(如果沒記錯的話是這樣拼的)。 主要方法在nextLexeme里。 邏輯不復雜,debug跟一下就清晰了。

java字元串替換演算法問題

publicclassDay09_C{
staticStringsrc="aeiou";
staticbooleanflag=false;
publicstaticvoidmain(String[]args){
Stringch1="amcsefig",ch2="2931";
System.out.println("ch1:"+ch1+";ch2:"+ch2+" "+getStr(ch1,ch2));
ch2="29";
System.out.println("ch1:"+ch1+";ch2:"+ch2+" "+getStr(ch1,ch2));
}
privatestaticStringgetStr(Stringch1,Stringch2){
Stringtem="";
for(inti=0,c=0;i<ch1.length();i++){
chara=ch1.charAt(i);
for(intj=0;j<src.length();j++){
charb=src.charAt(j);
if(!(a!=b)){
flag=true;
break;
}
}
if(flag){
if(c<ch2.length()){
a=ch2.charAt(c);
c++;
}else{
a='#';
}
}
tem+=a;
flag=false;
}
returntem;
}
}

㈢ 面試演算法題:你的任務就是計算出長度為n的字元串(只包含『A』、『B』和『C』),有多少個是暗黑字元串。

程序肯定不是判斷一個字元串是純潔的還是黑暗的。從現有的題目描述看,程序和題目沒有關系。

題目是否不全?

㈣ Java程序設計演算法題 數組與字元串

代碼發給你了。

結果截圖如下。望採納。


㈤ 如何使用C語言求解最長公共子字元串問題及相關的演算法

假定字元串採用堆分配方式,編寫一個程序,求兩個字元串S和T的一個最長公共子串

本題的思路:
本題要實現的演算法掃描兩個字元串。其中index指出最長公共子串在s中的序號,length指出最長公共子串的長度

堆分配存儲表示如下:
typedef struct{
char *ch;
int length;
}Hstring;

Status MaxComString(Hstring S,Hstring T,int &length){

index=0;
length=0;
i=0;

//令i作為掃描字元串S的指針
while(i<S.length){
j=0;
//令j作為掃描字元串T的指針
while(j<T.length){
if(s.ch[i]==T.ch[j]){
//找一個子串,其在字元串S中的序號為i,長度為length1
length1=i;
for(k=1;S.ch[i+k]==T.ch[j+k];k++)length1++;
if(length1>length){
//將較大長度值賦給index與length
index=i;
length=length1;
}
j=j+length1;//繼續掃描字元串T中第j=length1個字元之後的字元
}else{
j++;
}
}//while
i++;
}//while
printf("最長公共子串:");
for(i=0;i<length;i++)printf("%c",S.ch[index+i]);
return OK;
}

㈥ 字元串匹配演算法是怎麼算的

這是一個畢業老師出的字元串的演算法的題目!這是答案 可以參考一下! boyermoore演算法的sample程序 TCHAR * BoyerMooreSearch(TCHAR *sSrc, TCHAR *sFind) { // // 聲明: // 該段代碼只是BoyerMoore(名字也許不準確) 的基本思想,當 // 然不是最優的,具體完善工作就留給你自己樂!嘻嘻。 // 該演算法的本質就是從字元串的右端而不是左端開始比較,這 // 樣,當查詢不匹配時才有可能直接躍過多個字元(最多可以躍過 // strlen(sFind)個字元), 如果最右邊的字元匹配則回溯。比如: // // pain // ^ 這是第一次比較n和空格比 // The rain in SpainThe rain in Spain // // pain // ^ 這是第二次比較,好爽呀! // The rain in SpainThe rain in Spain // // 當然,這樣比較會產生一些問題,比如: // // pain // ^ (圖1) // The rain in SpainThe rain in Spain // // 如果比較到這兒,大家都會看到,只需再向後移到兩個字元 // 就匹配成功了,但如果接下去還按上面的方法跳strlen( sFind)的 // 話,就會錯過一次匹配!!!!! // // pain // ^ // The rain in SpainThe rain in Spain // // 怎麼辦?當然可以解決!大家回頭看圖1,當時a是pain的子 // 串,說明有可能在不移動strlen(sFind) 的跨度就匹配成功,那就 // 人為地給它匹配成功的機會嘛!串一下pain串, 直接讓兩個a對齊 // 再做比較!呵呵,如果要比較的字元不是pain的子串,當然就可 // 以直接跨過strlen(sFind)個字元了! 不知我說明白沒? // // // 查詢串的長度 int nLenOfFind = lstrlen(sFind); // 被查詢串的長度 int nLenOfSrc = lstrlen(sSrc); // 指向查詢串最後一個字元的指針 TCHAR * pEndOfFind = sFind + nLenOfFind -1; // 指向被查詢串最後一個字元的指針 TCHAR * pEndOfSrc = sSrc + nLenOfSrc -1; // 在比較過程中要用到的兩個指針 TCHAR * pSrc = sSrc; TCHAR * pFind; // 總不能一直讓它比較到 win.com 文件的地址去吧?嘻嘻! while ( pSrc <= pEndOfSrc ) { // 每次匹配都是從右向左,這是本演算法的核心。 pFind = pEndOfFind; // 如果比較不成功,被查詢串指針將向右串的字元數 int nMoveRightSrc; // 比較被查詢串的當前字元是否和查詢串的最右邊字 // 符匹配,如果匹配則回溯比較,如果全匹配了,該 // 干什麼,我就不用說了吧?:-) while ( pFind >= sFind ) { // TNND,白廢功夫比了!看看需要向右移動幾個 // 字元吧(如果說從右到左是本演算法的核心,則 // 判斷向右移幾個字元則是本演算法的技巧)。 if ( *pSrc != *pFind ) { // 被查詢串的當前字元是否在查詢串里? TCHAR * p = strrchr( sFind, *pSrc ); // 沒在,直接移lstrlen(sFind)個字元 if ( NULL == p ) nMoveRightSrc = nLenOfFind; else // 哇塞!真的在,那就只需... nMoveRightSrc = pEndOfFind - p; break; } // 哈!又匹配成功了一個!接著向左回溯... pFind --; pSrc --; } // 如果在上面的while循環里每一次比較都匹配了 // 那就對了唄!告訴用戶找到了 if ( pFind < sFind ) return ( pSrc + 1 ); // 沒匹配成功,nMoveRightSrc上面已經算好了 // 直接用就可以了。 pSrc += nMoveRightSrc; } // 程序運行到這兒肯定是沒指望了! return NULL; } 行了,函數寫完了,我們可以試一下了! void CTNNDDlg::OnButton1() { TCHAR sSrc[] = "The rain in Spain"; TCHAR sFind[]= "pain"; TCHAR * pFound = BoyerMooreSearch( sSrc, sFind ); if ( pFound ) MessageBox(pFound); else MessageBox("沒找到"); } //另外一個 void preBmBc(char *x, int m, int bmBc[]) { int i; for (i = 0; i < ASIZE; ++i) bmBc[i] = m; for (i = 0; i < m - 1; ++i) bmBc[x[i]] = m - i - 1; } void suffixes(char *x, int m, int *suff) { int f, g, i; suff[m - 1] = m; g = m - 1; for (i = m - 2; i >= 0; --i) { if (i > g && suff[i + m - 1 - f] < i - g) suff[i] = suff[i + m - 1 - f]; else { if (i < g) g = i; f = i; while (g >= 0 && x[g] == x[g + m - 1 - f]) --g; suff[i] = f - g; } } } void preBmGs(char *x, int m, int bmGs[]) { int i, j, suff[XSIZE]; suffixes(x, m, suff); for (i = 0; i < m; ++i) bmGs[i] = m; j = 0; for (i = m - 1; i >= -1; --i) if (i == -1 || suff[i] == i + 1) for (; j < m - 1 - i; ++j) if (bmGs[j] == m) bmGs[j] = m - 1 - i; for (i = 0; i <= m - 2; ++i) bmGs[m - 1 - suff[i]] = m - 1 - i; } void BM(char *x, int m, char *y, int n) { int i, j, bmGs[XSIZE], bmBc[ASIZE]; /* Preprocessing */ preBmGs(x, m, bmGs); preBmBc(x, m, bmBc); /* Searching */ j = 0; while (j <= n - m) { for (i = m - 1; i >= 0 && x[i] == y[i + j]; --i); if (i < 0) { OUTPUT(j); j += bmGs[0]; } else j += MAX(bmGs[i], bmBc[y[i + j]] - m + 1 + i); } }

㈦ java 演算法題:將下面的字元串按規則拆開,保存進list集合中

用String類的split函數先按中文逗號切分,再按"#"切分,就可以把此字元串前面的字母保存在集合a中,將後面的文字保存在集合b中。具體的Java程序如下:

importjava.util.ArrayList;
importjava.util.List;
publicclassCC{
publicstaticvoidmain(String[]args){
Strings="yw#語文,ss#數學,yy#英語,ty#體育";
List<String>a=newArrayList<String>();
List<String>b=newArrayList<String>();
String[]s1=s.split(",");
for(Stringtmp:s1){
String[]s2=tmp.split("#");
a.add(s2[0]);
b.add(s2[1]);
}
for(inti=0;i<a.size();i++)
System.out.print(a.get(i)+"");
System.out.println();
for(inti=0;i<b.size();i++)
System.out.print(b.get(i)+"");
System.out.println();
}
}

運行結果:

yw ss yy ty
語文 數學 英語 體育

㈧ C語言的演算法題:一個交換距離字元串。求解

int one_swap_distance(char* A, char* B)
{
unsigned char EquaFlag = 0;
unsigned char SwapFlag = 0;
while((*A != '\0') && (*B != '\0'))
{
if(*A == *(A+1))
{
EquaFlag = 1;
}
if(*A != *B)
{
if(SwapFlag == 0)
{
if((*(A+1) != '/0') && (*A == *(B+1)) && (*B == *(A+1))) //判斷交換條件
{
SwapFlag = 1;
//已滿足條件交換,下一個就無須判斷了
A++;
B++;
}
else //
{
return false;
}
}
else
{
return false;
}
}
A++;
B++;
}
if((*A != '\0') || (*B != '\0')) //但凡2個字元串長度不一樣則不是
{
return false;
}
if((SwapFlag == 1) || (EquaFlag == 1))
{
return true;
}
}

㈨ 數據結構(c++)字元串 模式匹配演算法問題,對高手來說只要寫一點點

唉,還是去CSDN問吧,網路知道太水了,都是些弱智題。以後不來了。。

㈩ 演算法題。在一個字元串中有字元有數字,如"sa43lkjkhk3455kh3445566"找出最長的數字子串

1. 如果只是在演算法層面,對於演算法研究的話,這個問題貌似沒有什麼好的演算法,只能遍歷,取最大值,正如樓上這位兄弟所說。
2.如果是為了用程序實現
2.1可以使用正則表達式。
2.2將所有不為數字的字元全部替換成空格,然後按照空格分割,得到一個數組。找數組裡面長度最長的元素即可。
方法 2.2 雖然有些笨,但是直觀.

閱讀全文

與字元串演算法題相關的資料

熱點內容
雲伺服器的鏡像選擇什麼 瀏覽:754
python如何設置cplex 瀏覽:8
linux的mv命令詳解 瀏覽:357
怎麼把安裝好的python放在桌面上 瀏覽:119
mysql退出當前命令 瀏覽:741
現在還有什麼手機好用的app 瀏覽:324
java字元處理函數 瀏覽:274
指紋用於應用加密什麼意思 瀏覽:998
怎麼取消蘋果手機的appid密碼 瀏覽:997
門禁系統錄制卡怎麼加密 瀏覽:753
ssm看源碼哪本書好 瀏覽:933
linux查看網卡的命令 瀏覽:497
basic語言演算法 瀏覽:13
怎麼快捷刪除無用文件夾 瀏覽:475
你家離學校源碼用英語回答 瀏覽:504
電腦如何用伺服器地址 瀏覽:652
php轉化為二進制 瀏覽:738
程序員到國企感受 瀏覽:863
js二分搜索演算法 瀏覽:658
文件夾的定義與原意 瀏覽:202