导航:首页 > 源码编译 > 字符串算法题

字符串算法题

发布时间: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 虽然有些笨,但是直观.

阅读全文

与字符串算法题相关的资料

热点内容
阿里用的什么数据库服务器 浏览:337
玩剑网用哪个攻略app 浏览:76
javamysql数据库操作 浏览:225
眉山参加少儿编程培训 浏览:986
androidaes加密java 浏览:816
蜜字的app叫什么 浏览:544
程序员配乐 浏览:453
做一个解压屋 浏览:619
品牌衣服用什么app 浏览:151
python3链接数据库 浏览:55
教课书英语是什么app 浏览:884
环液式压缩机 浏览:479
android控件事件 浏览:967
云服务器的镜像选择什么 浏览:755
python如何设置cplex 浏览:10
linux的mv命令详解 浏览:359
怎么把安装好的python放在桌面上 浏览:121
mysql退出当前命令 浏览:743
现在还有什么手机好用的app 浏览:326
java字符处理函数 浏览:276