首页 > 解决方案 > 使用递归计算字符出现在字符串java中的次数

问题描述

我正在做一些递归练习,其中一个让我很困惑。问题是我应该计算字符串中出现“yo”的次数,但如果字母“o”出现在“yo”之前,我不应该计算它。

“yoyo”算二,但“yooyo”算一。我已经完成了一个代码,但它不符合不计算前面有“o”的“yo”的条件。谢谢您的帮助!

我的代码:

import java.util.*;

public class Mp3
{
    static int oui(String arr, int index)
    {
      int count = 0;
      if(index >= arr.length())
        return 0;
  
      if(count == 0)
      {
        if(arr.charAt(index) == 'y')
        {
          if(arr.charAt(index + 1) == 'o')
            count++;
          else if(arr.charAt(index - 1) == 'o' && arr.charAt(index - 2) != 'y')
            --count;
          else
            return count + oui(arr, index + 1);
        }
     }
     return count + oui(arr, index + 1);
  }

  public static void main (String[] args)
  {
     String inp3 = "yoyooyoxhadjiohioyooyoyoxxyoyo";

     int res3 = oui(inp3, 0);

     System.out.println(inp3 + ":" + res3);
  }
}

标签: javarecursion

解决方案


import java.util.*;

public class Mp3
{
  static int oui(String arr, int index)
  {
    int count = 0;
    if(index >= arr.length())
      return 0;
    if(arr.charAt(index)=='o' && arr.charAt(index+1)=='y'&&arr.charAt(index+2)=='o') 
      
       return count + oui(arr, index + 3);
      

    if(arr.charAt(index) == 'y' && arr.charAt(index + 1) == 'o')
       
       return count+ 1 +oui(arr, index + 2);
     
    
    return count + oui(arr, index + 1);
 }


  public static void main (String[] args)
 {
  String inp3 = "yoyooyoxhadjiohioyooyoyoxxyoyo";

  int res3 = oui(inp3, 0);

  System.out.println(inp3 + ":" + res3);
 }

}

**我尽量不要对您的代码进行太多更改:

  1. 我检查是否 index= o 然后如果后面跟着 yo 我跳过它们然后检查
  2. 我检查是否 index= y 然后是 o 然后我拿它们然后检查因为我总是先检查 o
  3. 简单:) 如果您有任何问题发表评论,我会尽力解释得更好**

推荐阅读