我正在尝试解决一个问题。但我错过了一些角落案例。请帮我。问题陈述是:
您有一个由小写英文字母组成的字符串 S
。您可以对 S
执行两种类型的操作:
- 在字符串末尾附加一个小写英文字母。
- 删除字符串中的最后一个字符。对空字符串执行此操作会生成空字符串。
给定一个整数 k
和两个字符串 s
和 t
,确定是否可以转换 s
通过对 s
执行 exactly k
到 t
。
如果可能,打印Yes;否则打印No.
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");
请帮我解决这个问题。
谢谢
最佳答案
您还需要将剩余的操作一分为二,因为您只需要添加和删除字母会浪费操作。
所以也许:
//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");
关于string - 通过恰好执行 K 个操作将字符串 S 转换为另一个字符串 T(添加到字符串 S 的末尾/从字符串 S 的末尾删除),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40359892/