1. 常规思路
统计所有碎片的总长度、碎片的数量,进行除法运算。
public class Main
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
String str = scan.nextLine().trim();
double sum = 0;
int ncount = 1; // 碎片个数
int sliceLen = 1; // 某一个碎片的长度
// 如果字符串为空
if (str == "")
{
System.out.println(0);
return;
}
// 如果字符串长度为1
if (str.length() == 1)
{
System.out.println(1);
}
for (int i=0; i<str.length()-1; i++)
{
// 如果当前字符和下一个相等
if (str.charAt(i) == str.charAt(i+1))
{
sliceLen++;
}
else
{
sum += sliceLen;
ncount++; // 字符种类数加1
sliceLen = 1;
}
}
// 加上最后一个碎片的长度
sum += sliceLen;
System.out.println(sum / ncount);
}
}
2. 利用技巧
所有碎片的总长度是已知的,即为字符串的总长度,所以只需考虑不同碎片的个数即可。
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
String str = scan.nextLine().trim();
char c = str.charAt(0);
int n = 1; // 记录不同的碎片数量
for (int i=1; i<str.length(); i++)
{
if (c != str.charAt(i))
{
c = str.charAt(i);
n++;
}
}
System.out.println(str.length() * 1.0 / n);
}