用递归计算特殊字符
counting special characters with recursion
我正在尝试对此进行编码,但没有得到预期的结果:
给定一个字符串,递归地(无循环)计算字符串中小写 'x' 字符的数量。
countX("xxhixx") → 4
countX("xhixhix") → 3
countX("hi") → 0
这是我的方法:
public int countX(String str) {
int count = 0;
if(str.length() >= 1 ) {
if(str.substring(0, 1).equals("x")) {
str = str.substring(1, str.length());
count = count + 1 + countX(str);
}
}
else {
str = str.substring(1, str.length());
count = count + countX(str);
}
return count;
}
假设您有一个字符串 "axbxcx"。下面的代码只查看字符串中的第一个字符并确定它是否为 x。如果是这样,则 return 1 除了在字符串的其余部分中找到的 x 的数量。如果第一个字符不是 x,则字符串中 x 的数量等于不包括第一个字符的字符串中 x 的数量,因此这就是 returned.
int count(String s)
{
if (s.length() == 0) // base case
{
return 0;
}
if (s.charAt(0) == 'x')
{
return 1 + count(s.substring(1));
}
else
{
return count(s.substring(1));
}
}
你的想法是对的,但我认为你把复杂的事情想过了。只需明确检查第一个字符是否为 x
(如您所见),并且在这种情况下仅递增 count
。 不管是不是,继续递归:
public static int countX(String str) {
int count = 0;
if (str.length() > 0) {
if (str.substring(0, 1).equals("x")) {
++count;
}
str = str.substring(1, str.length());
count += countX(str);
}
return count;
}
您应该试试这个(它假定您在初始 str 值不为 null 且长度大于 0 的方法之外进行测试)。
public int countX(String str) {
if ( str.length() == 1 ) {
return ("x".equalsTo(str) ? 1 : 0);
} else {
return (str.charAt(0) =='x' ? 1 : 0) + countX(str.substring(1,str.length())
}
}
这个怎么样?
public static int countX(String str) {
if (str.length() == 0) {
return 0;
}
if (str.substring(0, 1).equals("x")) {
return 1 + countX(str.substring(1));
}
return countX(str.substring(1));
}
这是一个简单的方法。
首先,检查字符串是否为空。这是递归的终止条件。
那么您的结果只是第一个字符(1
或 0
)的计数,加上字符串其余部分的计数(通过在 [=13 上调用您的函数计算得出) =]).
public static int countX(String str) {
if (str.isEmpty()) {
return 0;
}
return (str.charAt(0)=='x' ? 1 : 0) + countX(str.substring(1));
}
你可以试试这个:
public int countX(String str) {
int end = str.length(); //get length of the string
int counter = 0;
if(str.length()==0){
return counter; //recursion will stop here
}else{
if(str.charAt(end-1) == 'x'){
counter++;
}
end--;
str=str.substring(0,end); //your string will perform a decrease in length and the last char will be removed
}
return counter+countX(str);
}
我正在尝试对此进行编码,但没有得到预期的结果:
给定一个字符串,递归地(无循环)计算字符串中小写 'x' 字符的数量。
countX("xxhixx") → 4
countX("xhixhix") → 3
countX("hi") → 0
这是我的方法:
public int countX(String str) {
int count = 0;
if(str.length() >= 1 ) {
if(str.substring(0, 1).equals("x")) {
str = str.substring(1, str.length());
count = count + 1 + countX(str);
}
}
else {
str = str.substring(1, str.length());
count = count + countX(str);
}
return count;
}
假设您有一个字符串 "axbxcx"。下面的代码只查看字符串中的第一个字符并确定它是否为 x。如果是这样,则 return 1 除了在字符串的其余部分中找到的 x 的数量。如果第一个字符不是 x,则字符串中 x 的数量等于不包括第一个字符的字符串中 x 的数量,因此这就是 returned.
int count(String s)
{
if (s.length() == 0) // base case
{
return 0;
}
if (s.charAt(0) == 'x')
{
return 1 + count(s.substring(1));
}
else
{
return count(s.substring(1));
}
}
你的想法是对的,但我认为你把复杂的事情想过了。只需明确检查第一个字符是否为 x
(如您所见),并且在这种情况下仅递增 count
。 不管是不是,继续递归:
public static int countX(String str) {
int count = 0;
if (str.length() > 0) {
if (str.substring(0, 1).equals("x")) {
++count;
}
str = str.substring(1, str.length());
count += countX(str);
}
return count;
}
您应该试试这个(它假定您在初始 str 值不为 null 且长度大于 0 的方法之外进行测试)。
public int countX(String str) {
if ( str.length() == 1 ) {
return ("x".equalsTo(str) ? 1 : 0);
} else {
return (str.charAt(0) =='x' ? 1 : 0) + countX(str.substring(1,str.length())
}
}
这个怎么样?
public static int countX(String str) {
if (str.length() == 0) {
return 0;
}
if (str.substring(0, 1).equals("x")) {
return 1 + countX(str.substring(1));
}
return countX(str.substring(1));
}
这是一个简单的方法。
首先,检查字符串是否为空。这是递归的终止条件。
那么您的结果只是第一个字符(1
或 0
)的计数,加上字符串其余部分的计数(通过在 [=13 上调用您的函数计算得出) =]).
public static int countX(String str) {
if (str.isEmpty()) {
return 0;
}
return (str.charAt(0)=='x' ? 1 : 0) + countX(str.substring(1));
}
你可以试试这个:
public int countX(String str) {
int end = str.length(); //get length of the string
int counter = 0;
if(str.length()==0){
return counter; //recursion will stop here
}else{
if(str.charAt(end-1) == 'x'){
counter++;
}
end--;
str=str.substring(0,end); //your string will perform a decrease in length and the last char will be removed
}
return counter+countX(str);
}