替换函数2

本文介绍了一道编程题,目标是使用replace2函数将一个字符串S转换为另一个字符串D,并求出最少需要调用该函数的次数。提供了两种实现方案,一种为Java版本,另一种为C++版本。
时间限制:10000ms
单点时限:1000ms
内存限制:256MB



描述

小Hi开发了一个新的替换函数replace2(index, c1, c2),功能是将一个字符串第index个字符至最后一个字符中的字符c1,全部替换成字符c2。  

replace2函数很强大,对于任何长度相同的两个字符串S和D,都能通过调用若干次(不同参数的)replace2将S变成D。  

给定S和D,请你帮助小Hi算出他至少调用几次replace2可以将S变成D。

输入

输入包含两行,依次是两个字符串S和D。  

对于70%的数据,1 ≤ |S| = |D| ≤ 1000  

对于100%的数据,1 ≤ |S| = |D| ≤ 100000 S和D只包含小写字母

输出

一个整数表示答案

样例输入
aabbaa
bbaacc
样例输出
3

import java.util.*;
//80 超时版
public class Main {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		String s = sc.next();
		String t = sc.next();
		int cnt = 0;
		for(int i = 0; i < s.length(); i++){
			char c1 = s.charAt(i);
			char c2 = t.charAt(i);
			if(c1 != c2){
				s = s.substring(0, i) + s.substring(i).replace(c1, c2);
				cnt++;
			}
		}
		System.out.print(cnt);
		sc.close();
	}
}

#include <bits/stdc++.h>
using namespace std;

int main()
{
    //freopen("in.txt", "r", stdin);
    char s1[100002], s2[100002];
    long long int ans = 0;
    scanf("%s", s1);
    scanf("%s", s2);
    char c[26];
    for (int i = 0; i < 26; i++)
        c[i] = i;//字母次序 

    for (int i = 0; i < strlen(s1); i++)
    {
        int ch = c[s1[i] - 'a'];
        if (ch != s2[i] - 'a')
        {
            ans++;
            for (int j = 0; j < 26; j++)
            {
                if (c[j] == ch)
                {
                    c[j] = s2[i] - 'a';
                }
            }
        }
    }

    cout << ans << endl;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值