我在编码练习时遇到了麻烦:
如果字符串中的每个*
(星号),如果在星号之前和之后都有字符,则返回true,它们是相同的。
sameStarChar(" xy yzz")// true sameStarChar(" xy zzz")// false sameStarChar(" xa az")// true
正确的答案是:
public boolean sameStarChar(String str) {
for (int i = 1; i < str.length() - 1; i++) {
if (str.charAt(i) == '*' && str.charAt(i - 1) != str.charAt(i + 1)) {
return false;
}
}
return true;
}
我写的是:
public boolean sameStarChar(String str) {
for (int i = 1; i < str.length() - 1; i++) {
if (str.substring(i, i + 1) == "*" && str.substring(i - 1, i) != str.substring(i + 1, i + 2)) {
return false;
}
}
return true;
}
我无法理解子字符串和charAt方法。
答案 0 :(得分:2)
<强>说明:强>
如果对于字符串中的每个'*'(星号),如果在星号之前和之后都有字符,则返回true,它们是相同的。
sameStarChar("xy*yzz") → true
sameStarChar("xy*zzz") → false
sameStarChar("*xa*az") → true
伪代码:
遍历从1到长度为1的每个字符。如果字符是星号,并且前面的字符与之后的字符不同,则返回false。否则,如果到达终点,则返回true。
代码:
public boolean sameStarChar(String str){
int len = str.length();
for(int x = 1; x < len-1; x++){
if (str.charAt(x) == '*' && str.charAt(x-1) != str.charAt(x+1)){
return false;
}
}
return true;
}
<强>注释:强>
这是线性时间O(n)操作。
答案 1 :(得分:0)
str.charAt()
更容易阅读和理解。
此外,您的子字符串解决方案应该更像
if (str.substring(i, i + 1).equals("*") &&
!str.substring(i - 1, i).equals(str.substring(i + 1, i + 2))){
//etc.
}
Substring返回一个字符串,并比较你必须使用.equals()方法的文字刺痛值。
答案 2 :(得分:0)
相反,我计算'*'的数量和匹配的对的数量,并检查它们是否相等并返回true。
public boolean sameStarChar(String str) {
int count=0, noOfPairs=0;
for(int i=1; i<str.length()-1;i++){
if(str.charAt(i)=='*') count++;
if(str.charAt(i)=='*' && str.charAt(i+1)==str.charAt(i-1)) noOfPairs++;
}
if(count==noOfPairs) return true;
return false;
}
答案 3 :(得分:0)
另一种解决方案...
public boolean sameStarChar(String str) {
if(str.length()==0) return true;
if(str.length()==1 && str.contains("*")) return true;
if(!str.contains("*")) return true;
int i = 0;
boolean result = false;
while(i<str.length()-1){
if(i!=0 && str.charAt(i) == '*' && str.charAt(i-1) == str.charAt(i+1)){
result = true;
}else if(i!=0 && str.charAt(i) == '*' && str.charAt(i-1) != str.charAt(i+1)){
result = false;
}else if(str.charAt(i) == '*'){
result = true;
}
i++;
}
return result;
}
答案 4 :(得分:0)
不使用 indexOf(int ch, int fromIndex) 迭代字符串中每个单独字符的版本
public boolean sameStarChar(String str) {
int i=0;
int l=str.length();
for(i=str.indexOf("*",i);i!=-1;i=str.indexOf("*",i+1))
{
if(i==0 || i==l-1) //saves the program from accessing an out of bounds Index
continue;
else
{
if(str.charAt(i-1)!=str.charAt(i+1));
return false;
}
}
return true;
}