描述
现在是拼颜值的时代。 字符串也是如此,如果相邻字符相同出现次数越多 (即 s[i] == s[i + 1] ),那么字符串越丑,反之,颜值就越高。 我们定义字符串的丑陋度计算方法:如果对于两个相邻字符相等,加1分。否则不加分。 现在有一个由 a, b 和 ? 组成的字符串,计算丑陋度前需要先将字符串中的所有 ? 替换成 a 或 b。请输出能得到最低的字符串丑陋度。
举例: ?? 可表示为 ab,最低得分为0 a?a 可表示 aba,最低得分为0 abaa ,有一处相邻相等,最低得分为1
注意:最终分数越高表示字符串越丑陋
输入
由a, b, ?组成的字符串,长度为1 ~ 50
输出
字符串能得到丑陋分数的最低值
输入样例
??
a?a
abaa
复制样例
输出样例
0
0
1
此处应该考虑到三种情况:
1.“?”在字符串的首部:对颜值没有任何影响
2.在字符串的中间:“?”个数的奇偶数和“?”两边的字母是否相同相关
3.在字符串的尾部,与字符串的颜值没有任何关系
至此再加上各个字母的比较,即可成功的解决问题
private static String solution(String line) {
int temp =0,num =0;
char []a = new char[line.length()];
for(int i= 0;i<line.length();i++)
{
a[i] = line.charAt(i);
}
int i =0;
while(i<=a.length-1)
{temp =0;
if(a[i] =='?')
{temp =i;
while(temp<=a.length-1&&a[temp]=='?')
{
temp++;
}
if(i ==0)
{
i=(temp+1);
}
else if((temp-1)!=a.length-1)
{
int jiou = temp-i;
if(a[i-1]==a[temp])
{
if(jiou%2==1)
{
i=temp+1;
}
else {
num++;
i = temp+1;
}
}
else {if(jiou%2==1)
{
num++;
i = temp+1;
}
else {
i =temp+1;
}
}
}
else{
i = temp;
}
}
else {
if(i==0)
{
i++;
}
else {
if(a[i]==a[i-1])
{num++;
i++;
}
else {
i++;
}
}
}
}
return String.valueOf(num);
}