我必须找到字符串中最少出现的字符。
package String2;
public class Methods3 {
static final int chars=256;
static char least(String str) {
int[] bro=new int[chars];
int j;
//I made the frequency of chars:
for(j=0 ; j<str.length() ; j++) {
(bro[str.charAt(j)])++; //made the array
}
int min= bro[str.charAt(0)];
//Tried finding the smallest value:
for(int x=0 ; x<bro.length ; x++ ) {
if((bro[str.charAt(x)])<=min) {
min=(bro[str.charAt(x)]); //finding the smallest number of times
}
}
return (char) min;
}
public static void main(String[] args) {
String txt="yooooo bbaa ccoo";
char rez=least(txt);
System.out.println(rez);
}
}
答案 0 :(得分:2)
Java中的字符串不是每个符号一个字节。尝试创建长度为bro
的{{1}}数组,或使用HashMap代替数组。
Character.MAX_VALUE
使用地图
int[] bro=new int[Character.MAX_VALUE];
答案 1 :(得分:2)
您的代码中的问题位于:
bro[str.charAt(x)])
由于bro
数组的长度为256,因此x也在[0,256]的范围内,但是在您的情况下,您正在索引字符串str
本身,该字符串的长度不是256。 / p>
另外,您返回的是字符的最小出现次数,而不是字符本身,在这种情况下,您必须从数组中返回键而不是值,在这种情况下,您需要返回x
编辑:您还必须忽略所有根本不出现在字符串中的字符,在这种情况下,即使不出现,该字符也始终为0,并且始终为最小值。
替换:
for(int x = 0; x < bro.length; x++) {
if ((bro[str.charAt(x)]) <= min) {
min = (bro[str.charAt(x)]); // finding the smallest number of times
}
}
return (char) min;
具有:
for (int x = 0; x < bro.length; x++) {
if ((bro[x]) <= min && bro[x] > 0) {
min = x; // finding the smallest number of times
}
}
return (char) min;
答案 2 :(得分:1)
我猜您想打印“ y”,并且您的代码在很多方面都被破坏了:
这可以解决此问题:
public class Methods3 {
static final int chars = Character.MAX_VALUE;
static char least(String str) {
int[] bro = new int[chars];
int j;
for (j = 0; j < str.length(); j++) {
(bro[str.charAt(j)])++; // made the array
}
int min = Character.MAX_VALUE;
for (int x = 0; x < bro.length; x++) {
if ((bro[x]) <= min && bro[x] > 0) {
min = x; // finding the smallest number of times
}
}
return (char) min;
}
public static void main(String[] args) {
String txt = "yooooo bbaa ccoo";
char rez = least(txt);
System.out.println(rez);
}
}
(已固定,建议使用Character.MAX_VALUE)。这将适用于任何字符串。
请注意,必须使用最大值初始化min才能使算法起作用,因此min = Character.MAX_VALUE。
在使用“ bro [str.charAt(x)]”的地方,必须使用“ bro [x]”。
如果需要一个额外的条件“ bro [x]> 0”来忽略未找到的字符,则为
另外,如果您有两个具有相同计数的字母,它将打印最后一个以最小计数相同的字符串出现在字符串中。
答案 3 :(得分:0)
String txt="yooooo bbaa ccoo"; // string length here
您的字符串长度索引在0 <= x <= str.length -1
范围内,而您的for循环范围是0 <= x <= 255
。
在for循环0 <= x <= 255
中,请参见str.charAt(x)
if((bro[str.charAt(x)])<=min)
但是
str.length < 256 // that is the problem
x
应该是0 <= x <= str.length -1
答案 4 :(得分:0)
minOccurences
minOccurences
大于当前数字,则将其设置为当前数字,清除minChars
并添加字符minOccurences
等于当前数字,请添加字符