gpt4 book ai didi

java - Java中codingBat谜语starOut高效解法

转载 作者:行者123 更新时间:2023-11-29 09:39:11 24 4
gpt4 key购买 nike

我说的问题是this

问题陈述:

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

starOut("ab*cd") → "广告"

starOut("ab**cd") → "广告"

starOut("sm*eilly") → "傻"

我得到的解决方案有点困惑我使用了大约 6 个 if 语句和一个特定案例的处理,寻找具有较少 ifs 的更清洁的解决方案。

请不要使用超过 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;
}

最佳答案

伪代码:

遍历字符串中的所有字符。如果您落在星号上,请不要记录它。向左看,如果您看到星号,请不要记录它。如果看到星号,请向右看,不要记录它。如果以上都没有发生,记录下来。

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 .不要那样做。这是very inefficient .

关于java - Java中codingBat谜语starOut高效解法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24093694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com