检查是否可以使用递归将一个字符串转换成另一个字符串。

huangapple go评论110阅读模式
英文:

Check if it is possible to transform one string to another using recursion

问题

  1. 我正在尝试使用递归解决以下方法
  2. https://www.geeksforgeeks.org/check-possible-transform-one-string-another/
  3. static boolean abbreviation(String a, String b, int m, int n) {
  4. char[] x = a.toCharArray();
  5. if (m == 0 || n == 0)
  6. return true;
  7. if (m == 0 && n != 0)
  8. return false;
  9. if (n == 0) {
  10. for (int i = 0; i < x.length; i++) {
  11. // 如果任何字符不是小写,返回false
  12. if (Character.isLowerCase(x[i])) {
  13. System.out.println(x[i]);
  14. return true;
  15. }
  16. }
  17. return false;
  18. }
  19. if ((a.charAt(m - 1) == b.charAt(n - 1)) ||
  20. (Character.toUpperCase(a.charAt(m - 1)) == b.charAt(n - 1))) {
  21. return abbreviation(a, b, m - 1, n - 1);
  22. } else
  23. return abbreviation(a, b, m - 1, n) && abbreviation(a, b, m, n - 1);
  24. }

我对以下输入得到了true,而不是false

输入 1

AbCdE

AFE

输入 2

beFgH

EFG

  1. <details>
  2. <summary>英文:</summary>
  3. I am trying to solve the below method by using recursion
  4. https://www.geeksforgeeks.org/check-possible-transform-one-string-another/
  5. static boolean abbreviation(String a, String b,int m, int n) {
  6. char[] x = a.toCharArray();
  7. if(m ==0|| n==0)
  8. return true;
  9. if(m==0 &amp;&amp; n!=0)
  10. return false;
  11. if(n==0){
  12. for(int i=0; i &lt; x.length; i++){
  13. //if any character is not in lower case, return false
  14. if( Character.isLowerCase( x[i] )){
  15. System.out.println(x[i]);
  16. return true;
  17. }
  18. }
  19. return false;
  20. }
  21. if((a.charAt(m-1)==b.charAt(n-1))||
  22. (Character.toUpperCase(a.charAt(m-1))==b.charAt(n-1))){
  23. return abbreviation(a,b,m-1,n-1);
  24. }else return abbreviation(a,b,m-1,n) &amp;&amp; abbreviation(a,b,m,n-1);
  25. }
  26. I am getting`true` instead of `false` for below inputs
  27. **Input 1**
  28. AbCdE
  29. AFE
  30. **Input 2**
  31. beFgH
  32. EFG
  33. </details>
  34. # 答案1
  35. **得分**: 1
  36. 以下是翻译好的内容:
  37. 当遍历两个字符串的字符时,有三种情况:
  38. - 字符匹配(如果是小写,则转为大写)
  39. - 字符不匹配且第一个字符串的字符为小写
  40. - 字符不匹配且第一个字符串的字符为大写
  41. 基本情况是,如果第一个字符串中的所有字符都已检查完毕,则检查是否全部匹配。
  42. ```java
  43. boolean abbreviation(String a, String b, int m, int n) {
  44. if (m == 0)
  45. return n == 0;
  46. if (n > 0 && Character.toUpperCase(a.charAt(m - 1)) == b.charAt(n - 1)) {
  47. return abbreviation(a, b, m - 1, n - 1);
  48. } else if (!Character.isUpperCase(a.charAt(m - 1))) {
  49. return abbreviation(a, b, m - 1, n);
  50. } else {
  51. return false;
  52. }
  53. }

演示:

  1. System.out.println(abbreviation("AbCdE", "AFE", 5, 3));
  2. System.out.println(abbreviation("beFgH", "EFG", 5, 3));
  3. System.out.println(abbreviation("beFgh", "EFG", 5, 3));
  4. System.out.println(abbreviation("daBcd", "ABC", 5, 3));

输出:

  1. false
  2. false
  3. true
  4. true
英文:

You have 3 cases when traversing characters of two string

  • Character matched (if lowercase then doing uppercase)
  • Charcter not matched and first string character is lowercase
  • Charcter not matched and first string character is uppercase

And base case if all character checked in first string then check all matched or not.

  1. boolean abbreviation(String a, String b, int m, int n) {
  2. if (m == 0)
  3. return n == 0;
  4. if (n &gt; 0 &amp;&amp; Character.toUpperCase(a.charAt(m - 1)) == b.charAt(n - 1)) {
  5. return abbreviation(a, b, m - 1, n - 1);
  6. } else if(!Character.isUpperCase(a.charAt(m - 1))) {
  7. return abbreviation(a, b, m - 1, n);
  8. } else {
  9. return false;
  10. }
  11. }

Demo:

  1. System.out.println(abbreviation(&quot;AbCdE&quot;, &quot;AFE&quot;, 5, 3));
  2. System.out.println(abbreviation(&quot;beFgH&quot;, &quot;EFG&quot;, 5, 3));
  3. System.out.println(abbreviation(&quot;beFgh&quot;, &quot;EFG&quot;, 5, 3));
  4. System.out.println(abbreviation(&quot;daBcd&quot;, &quot;ABC&quot;, 5, 3));

Output:

  1. false
  2. false
  3. true
  4. true

huangapple
  • 本文由 发表于 2020年10月10日 23:04:47
  • 转载请务必保留本文链接:https://go.coder-hub.com/64294874.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定