高分求判断两个字符串异同,算法...在线等

kingmax54212008 2015-10-24 10:57:34
两个字符串S,T, 各自长度为N,M。 <注:N和M均小于500>
判断两个字符串的异同(异:不同点只要找出一个字母差别,除此而外为“不可能”;同:表示完全相同),输出插入、删除、交换、完全相同、不可能处理

比如 S=“nice”, T="niece" ,则输出 “插入 e”
比如 S=“from”,T="form" , 则输出 “交换 e”
比如 S=“o”,T=“odd”,则输出“不可能”

题目比较好理解, 求一个 C、C++或JAVA算法 。

先拜谢!
...全文
160 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwouyang 2015-11-04
  • 打赏
  • 举报
回复

int destinct(const char* s, const char* t, size_t n, size_t m)
{
    int result = 0;
    char diff, diff2;
    if((n-m<=1) && (n-m>=-1))
    {
        while(*s==*t && *s!='\0') s++, t++;
        switch(n-m)
        {
        case 1:
            result = 3;   // 可能是删除
            diff = *s++;
            break;
        case -1:
            result = 2;   // 可能是插入
            diff = *t++;
            break;
        default:  // n==m
            if(*s==*t)
            {
                result = 1;   // 相同
                break;
            }
            diff = *s;
            diff2 = *t;
            if(*++s == diff2 && *++t == diff)
            {
                s++;
                t++;
                result = 4;  // 可能是交换
            }
//          else
//              result = 5;    // 可能是改变
        }
        while(*s==*t && *s!='\0') s++, t++;
        if(*s!=*t)
            result = 0;
    }
    switch(diff)
    {
    case 1:
        printf("完全相同");
    case 2:
        printf("插入%c", diff);
    case 3:
        printf("删除%c", diff);
    case 4:
        printf("交换%c%c", diff, diff2);
//    case 5:
//        printf("改变%c为%c", diff, diff2);
    default:
        printf("不可能");
    }
    return(result);
}
zyl072 2015-10-24
  • 打赏
  • 举报
回复
1. 先比较两个字符串长度 2. 若长度相等,则依次比较两个串,若完全相等,则输出完全相同。如果出现了2个字符的差异,且交换后相等,则输出相等。其他情况为不可能。 3. 若长度相差1, 仍然依次扫描,碰到第一个不等字符时,把长串的那个字符删掉。删掉后若完全相等,那就输出删除XX。否则输出不可能。 4. 其他情况,均输出不可能。 备注:删除一个字符和插入一个字符理论上是一样的。

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧