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

用Java编写Bat riddle starOut的有效解决方案

潘星阑
2023-03-14

我说的问题是这个

问题陈述:

返回给定字符串的一个版本,其中对于字符串中的每个星号(),其左右两侧的星号和字符都将消失。所以“abcd”产生“ad”,而“ab**cd”也产生“ad”。

StarOut("ab*cd")→"ad"

StarOut("ab**cd")→"ad"

starOut(“sm*eilly”)→ “傻”

我得到的解决方案有点混乱,我使用了大约6个if语句和一个特定案例的处理,寻找具有较小if的更干净的解决方案。

请不要使用超过1个循环和集合或正则表达式。

以下是我的解决方案:

public String starOut(String str) {
  String result="";
  boolean currentFlag=false;
  
  if(str.length()==0)
  return result;
  
  for(int i=0;i+1<str.length();i++)
  {
    if(str.charAt(i)=='*')
    {
       i+=1;
       currentFlag=true;
       continue;
     }
     if(str.charAt(i+1)=='*')
     {
        i+=2;
        continue;
     }
     if((i>0)&&str.charAt(i-1)=='*')
     {
        continue;
     }
     result+=str.substring(i,i+1);
     currentFlag=false;

   }
   
  if(!(currentFlag)&&(str.length()==3)&&(str.charAt(1)=='*'))
      return ""; 
      
   if((str.charAt(str.length()-1)!='*')&!(currentFlag))
     return result+=str.charAt(str.length()-1);
    else
      return result;
}

共有3个答案

卢聪
2023-03-14

我认为使用正则表达式和模式匹配解决这个问题会很简单

public String starOut(String str) {
  String pattern = "([a-zA-Z0-9]{0,1})\\*+([a-zA-Z0-9]{0,1})";
  str = str.replaceAll(pattern, "");
  return str;
}
李星辰
2023-03-14

这是我写的解决方案。它使用1个循环。

public String starOut(String str)
{
    String ret = "";
    for (int i = 0; i < str.length(); i++)
    {        
        if (!( '*' == str.charAt(i) 
        || i + 1 < str.length() && '*' == str.charAt(i+1)
        || i > 0 && '*' == str.charAt(i-1) ))
        {
            ret = ret + str.charAt(i);
        }        
    }
    return ret;
}
牛昱
2023-03-14

伪代码:

单步遍历字符串中的所有字符。如果你降落在星号上,不要记录。向左看,如果看到星号,不要记录。向右看,如果你看到星号,不要记录。如果上述情况均未发生,则记录下来。

Java代码:

public static String starOut(String s) {
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < s.length(); i++) {
        if (s.charAt(i) == '*') continue;
        if (i > 0 && s.charAt(i - 1) == '*') continue;
        if (i < s.length() - 1 && s.charAt(i + 1) == '*') continue;
            
        sb.append(s.charAt(i));
    }

    return sb.toString();
}

注意:我看到许多答案会弹出,它们将String对象连接到循环中,而不是使用StringBuilder。不要那样做。效率很低

 类似资料:
  • 当我们基本完成程序的设计,我们就可以编写代码了,它是对我们的解决方案的实施。 版本一 例10.1 备份脚本——版本一 #!/usr/bin/python # Filename: backup_ver1.py importos importtime # 1. The files and directories to be backed up are specified in a list. sour

  • 问题内容: 尽管这可能是Java Web Services的副本,但我想知道从哪里开始和继续。过去,我花了很多时间来找到从哪里开始,但我却没有。阅读有关Web服务的页面时,有很多术语和混乱(至少对我来说是如此!)。有很多术语- 例如Web Service和其他我不知道的术语。该用户组可以合并并提供易于理解和遵循的Java Web Services的高级概述吗?我感谢您的好意,并感谢您的帮助。 问题

  • 本文向大家介绍基于tomcat8 编写字符编码Filter过滤器无效问题的解决方法,包括了基于tomcat8 编写字符编码Filter过滤器无效问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 同事遇到编码问题时想做一个解决全站的字符编码过滤器,过滤器类和配置如下: 过滤器类: 过滤器配置: 但是在前端form的提交方式是get的情况下,得到的仍然是乱码。 刚开始一直纠结于过滤器是不是写错了

  • Java怎么读取很大数据量的 Excel (1000万条数据),希望一行一行读取数据。 目前使用POI进行了文件读取,但是耗费时间很长,大约用了1分钟。大家有没有更快的解决方案

  • 本文向大家介绍Java String.replace()方法"无效"的原因及解决方式,包括了Java String.replace()方法"无效"的原因及解决方式的使用技巧和注意事项,需要的朋友参考一下 首先我们来看个例子 运行结果是什么呢?我们先看看这个方法的api 返回一个新的字符串,用newChar替换此字符串中出现的所有oldChar 所以这里的结果为:输出结果是abcd 而不是fbcd,

  • 本文向大家介绍IDEA编写JavaWeb出现乱码问题解决方案,包括了IDEA编写JavaWeb出现乱码问题解决方案的使用技巧和注意事项,需要的朋友参考一下 使用IDEA写JavaWeb项目时,总会出现编码出错等问题,比如下面这样,页面显示出来一大堆乱码,下面跟着我来操作一下,可以成功解决! 首先在IDEA安装目录下有一个:bin的文件夹,打开后找到如下两个东西:分别打开后再后面添加:-Dfile.