题目 1205: 字符串的修改

时间限制: 1Sec 内存限制: 128MB

题目描述:(原题链接)

怎么样,前面的题还可以吧~

依旧是字符串处理,设A和B是两个字符串。我们要用最少的字符操作次数,将字符串A转换为字符串B。这里所说的字符操作共有三种:

  1. 删除一个字符;
  2. 插入一个字符;
  3. 将一个字符改为另一个字符。
    对任给的两个字符串A和B,计算出将字符串A变换为字符串B所用的最少字符操作次数。

输入:

第一行为字符串A;第二行为字符串B;字符串A和B的长度均小于200。

样例输入:
sfdxbqw
gfdgw


输出:

只有一个正整数,为最少字符操作次数。

样例输出 : 4


解题思路:

先把两个字符串转化成等长(添加一个a长度的串),然后比较两个串中已经相同的字符(也就不用修改),然后得出还需修改的字符次数(修改b次字符), 结果即为a+b;

注意事项:

需要计算出长度差以及判断相同字符数(暴力)

参考代码:

import java.util.Scanner;
public class Point1 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        String s1 =in.nextLine();
        String s2 =in.nextLine();
        int len1=s1.length(),len2=s2.length();  //计算出长度差即为需要操作的数目a
        int min =Math.min(len1, len2),max=Math.max(len1, len2);
        int equ=0; //统计两个串中相同的字符个数
        for(int i=0;i<len1;i++) {
            for(int j=0;j<len2;j++) {
                if(s1.charAt(i)==s2.charAt(j))
                    equ++;
            }
        }
        System.out.println((max-min+min-equ)); //长度差a+还需修改的次数b
        in.close();
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是使用C语言实现的代码: ```c #include <stdio.h> #include <string.h> void deleteExtraSpaces(char* str) { int i, j; int len = strlen(str); int flag = 0; for (i = 0; i < len; i++) { if (str[i] == ' ') { if (flag == 0) { str[j++] = str[i]; flag = 1; } } else { str[j++] = str[i]; flag = 0; } } if (j > 0 && str[j-1] == ' ') { str[j-1] = '\0'; } else { str[j] = '\0'; } } int countWord(char* str, char* word) { int count = 0; char* p = strstr(str, word); while (p != NULL) { count++; p = strstr(p+1, word); } return count; } void replaceWord(char* str, char* oldWord, char* newWord) { char buffer[1000]; char* p = strstr(str, oldWord); if (p != NULL) { strncpy(buffer, str, p-str); buffer[p-str] = '\0'; sprintf(buffer+(p-str), "%s%s", newWord, p+strlen(oldWord)); strcpy(str, buffer); } } int main() { char str[1000]; char word[100]; printf("请输入一个英文句子:\n"); fgets(str, sizeof(str), stdin); str[strlen(str)-1] = '\0'; deleteExtraSpaces(str); printf("删除多余空格后的句子为:\n%s\n", str); printf("请输入要统计频度的单词:\n"); scanf("%s", word); int count = countWord(str, word); printf("%s出现的次数为:%d\n", word, count); printf("请输入要替换的单词:\n"); char oldWord[100], newWord[100]; scanf("%s", oldWord); printf("请输入要替换成的单词:\n"); scanf("%s", newWord); replaceWord(str, oldWord, newWord); printf("替换后的句子为:\n%s\n", str); return 0; } ``` 代码的具体实现如下: 1. `deleteExtraSpaces` 函数用于删除多余的空格,具体实现方法是遍历字符数组,如果当前字符是空格,判断前一个字符是否也是空格,如果不是则将当前字符保存到新的字符数组中,并将 `flag` 标志位设置为1;如果当前字符不是空格,则将当前字符保存到新的字符数组中,并将 `flag` 标志位设置为0。最后,如果新的字符数组的最后一个字符是空格,则将其替换为字符串结束符 `\0`,否则直接添加字符串结束符 `\0`。 2. `countWord` 函数用于统计某个单词在字符串中出现的次数,具体实现方法是使用 `strstr` 函数查找字符串中是否包含指定单词,如果找到,则计数器加1,并在上一次找到单词的位置之后继续查找下一次出现单词的位置,直到找不到为止。 3. `replaceWord` 函数用于替换字符串中的指定单词,具体实现方法是使用 `strstr` 函数查找字符串中是否包含指定单词,如果找到,则将字符串分成两部分,前一部分是从开头到找到单词的位置,后一部分是从找到单词的位置加上旧单词的长度到字符串结尾的部分。然后使用 `sprintf` 函数将这三部分重新组合成一个新的字符串,并将其赋值给原字符串。 在 `main` 函数中,先使用 `fgets` 函数从标准输入流中读取字符串,并使用 `deleteExtraSpaces` 函数删除多余的空格;然后使用 `countWord` 函数统计指定单词出现的次数;接着使用 `replaceWord` 函数替换指定单词;最后输出修改后的字符串

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值