我是编程的新手,我正在使用字符串进行开发,我还没有使用Hash Maps我唯一的问题是最后一个字母。例如s的最后一个字母该值包含2而不是1。我怎样才能做到这一点?
public static void main(String[] args) {
String word = "Chris",
curr_char,
next_char;
int length_string = word.length(),
count = 0;
char end_letter = word.charAt(word.length()-1);
String end = Character.toString(end_letter);
for(int index = 0; index < word.length(); index++)
{
curr_char = word.substring(index, index+1);
for(int next_index = 0;next_index<word.length(); next_index++)
{
next_char = word.substring(next_index, next_index+1);
if (curr_char.equalsIgnoreCase(next_char))
{
count = 1;
}
if(curr_char.contains(end))
{
count = count + 1;
}
}
System.out.println(word.charAt(index) + " " + count);
}
}
答案 0 :(得分:0)
您的算法逻辑存在一些问题。该算法不适用于诸如&#34; Chriss&#34;等字符串。或&#34; Chcriss&#34;。你输出的输入字符串&#34; Chriss&#34;会是
C p 1 h 1此外,您有2次迭代,这使得算法效率不高。要有效的算法应该花费更少的时间(高速)和更少的空间(更少的记忆)。
上述问题通常通过使用大小为26的整数数组(例如 charArrayCount )来解决,因为英文字母中有26个字母。该整数数组的每个元素代表字母表中的字符&amp;用于计算字符串中出现的次数。你将迭代你的字符串中的每个字符&amp;使用公式,
charArrayCount[25 - ('z' - ch)] += 1;
其中&#39; ch&#39;将是你的字符串中的一个字符。然后,您可以遍历数组&#39; charArrayCount&#39; &amp;得到那些值&gt;你需要照顾大写和大写。小写字符。
在这种情况下,你只需要通过字符串&amp;无论你的字符串有多长,比如一千个字符,你只为26个元素的整数数组创建空间。
试试这个&amp;看看它是否有帮助。
答案 1 :(得分:-1)
此代码现在运行完美:
public static void main(String args[]) {
String word = "Chris" , curr_char , next_char;
int length_string = word.length();
char end_letter = word.charAt(word.length()-1);
String end = Character.toString(end_letter);
for(int index = 0; index <word.length(); index++)
{
int count = 0; //resetting the value of count every time
curr_char = word.substring(index, index+1);
for(int next_index = 0;next_index<word.length(); next_index++)
{
next_char = word.substring(next_index, next_index+1);
if (curr_char.equalsIgnoreCase(next_char))
{
count = count + 1;
//if any character repeats it increase the value of count
}
}
System.out.println(word.charAt(index) + " " + count);
}
}
测试一次......