当前位置: 首页 > 知识库问答 >
问题:

通过精确执行K个操作(附加到/从字符串S的末尾删除)将字符串S转换为另一个字符串T

邓声
2023-03-14

我正在试图解决一个问题。但是我缺少一些角落案例。请帮助我。问题陈述是:

您有一个由小写英文字母组成的字符串S。您可以对S执行两种类型的操作:

  1. 在字符串的末尾附加一个小写英文字母

给定一个整数k和两个字符串s和t,通过对s执行上述操作中的k来确定是否可以将s转换为t。

如果可能,打印Yes;否则,打印编号。

Examples 
Input           Output

hackerhappy     Yes
hackerrank
9

5 delete operations (h,a,p,p,y) and 4 append operations (r,a,n,k)

aba             Yes
aba
7

4 delete operations (delete on empty = empty) and 3 append operations

我试过这样做(C语言):

int sl = strlen(s); int tl = strlen(t); int diffi=0;  

int i;
for(i=0;s[i]&&t[i]&&s[i]==t[i];i++); //going till matching
diffi=i;  

((sl-diffi+tl-diffi<=k)||(sl+tl<=k))?printf("Yes"):printf("No");

请帮我解决这个问题。

非常感谢。

共有3个答案

孟品
2023-03-14

这应该适用于所有情况:

int sl = strlen(s); int tl = strlen(t); int diffi=0;  

int i,m;
for(i=0;s[i]&&t[i]&&s[i]==t[i];i++); //going till matching
diffi=i; 
m = sl+tl-2*diffi;

((k>=m&&(k-m)%2==0)||(sl+tl<=k))?printf("Yes"):printf("No");
关翰
2023-03-14

您可以使用二进制搜索的另一种方法。

取长度较小的字符串,取长度为/2的子字符串(模式)。

1.如果你得到一个匹配项,则对两个字符串进行二进制搜索(按字符),如果匹配项,则在模式中追加长度/4个字符,如果匹配项,则在模式中追加长度/2^n,否则在原始(长度/2的模式)中追加一个字符,然后重试。

2.如果得到长度为/2的图案不匹配,则将图案长度减少到长度/4,如果得到匹配,则追加下一个字符。

现在重复步骤1和2

如果n1 n2

例子:

s1=Hackerhappy
s2=Hackerrank
pattern=Hacker // length = 10 (s2 is smaller and length of s2=10 length/2 =5)
//Do a binary search of the pattern you will get a match by steps 1 and 2
n1 number of mismatched characters is 5 
n2 number of mismatched characters is 4

Now n1+n2<k // its because we will need to do these much operation to make these to equal.
So Yes
拓拔泉
2023-03-14

您还需要将其余的操作除以2,因为只需添加和删除字母即可浪费这些操作。

所以也许:

//c语言-如果s==t,则strcmp(s, t)返回0。

if(strcmp(s,t))
    ((sl-diffi+tl-diffi<=k && (k-(sl-diffi+tl-diffi))%2==0)||(sl+tl<=k))?printf("Yes"):printf("No");
else 
   if(sl+tl<=k||k%2==0) printf("Yes"); else printf("No");
 类似资料:
  • 我正在解决“HackerRank”页面上的一个问题,特别是名为“Append and Delete”的问题,但我无法使所有情况都正确。 https://www.hackerrank.com/challenges/append-and-delete/problem “您有一个小写英文字母字符串。您可以对该字符串执行两种类型的操作: 在字符串的末尾附加一个小写英文字母。删除字符串中的最后一个字符。对空

  • 问题内容: 我有一个字符串,我想仅使用Java从字符串的结尾删除行尾字符 我想成为 (此问题类似于但与问题593671不同) 问题答案: 您可以使用。这修剪和字符在字符串的结尾 正则表达式的解释如下: 是包含和的字符类 是一个或多个重复 是弦末锚 参考文献 regular-expressions.info/Anchors,角色类,重复 相关话题 您还可以使用修剪字符串 开头 和 结尾 的 所有 空

  • 问题内容: 我有一串琴弦,其中一些琴弦。我只想删除最后四个字符。 换句话说,我有 我希望它成为 Python处理此问题的方法是什么? 问题答案:

  • 我正在研究将字符串从一个字符集转换为另一个字符集,阅读了很多关于它的示例,最终找到了下面的代码,这对我来说很好,作为一个字符集编码的新手,我想知道,这是否是正确的方法。 要将字符串从ASCII转换为EBCDIC,我必须执行以下操作: 要将EBCDIC转换为ASCII,我必须:

  • 问题内容: 可以说我有这个单词列表: 比我有文字 是否有匹配stopWords并在忽略大小写时将其删除的方法;像这样的地方?: 结果: 如果您了解正则表达式,效果很好,但我真的更喜欢像Commons解决方案这样的东西,它更注重性能。 顺便说一句,现在我正在使用此通用方法,该方法缺少适当的不区分大小写的处理: 问题答案: 这是不使用正则表达式的解决方案。我认为它不如我的其他答案,因为它更长且不清楚,

  • 假设我有以下数组列表: 并且必须遵守规则: 从数组列表 1 开始,我想形成新的以下数组列表: <李>猫狗 <李>鼠蛇 无论如何都可以这样做。我目前还没有找到任何字符串到字符串转换的内容。