我说的问题是这个
问题陈述:
返回给定字符串的一个版本,对于字符串中的每个星号(*),星号和其左右两侧的字符都消失了.所以"ab*cd"产生"ad"和"ab**cd"也产生"ad".
starOut("ab*cd")→"ad"
starOut("ab**cd")→"ad"
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;
}
Run Code Online (Sandbox Code Playgroud)
伪代码:
逐步浏览字符串中的所有字符.如果您使用星号,请勿记录.偷看,如果你看到一个星号,不要记录它.如果看到星号,请向右看,不要记录.如果上述情况均未发生,请记录下来.
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();
}
Run Code Online (Sandbox Code Playgroud)