1. 程式人生 > >小米oj—字串拼顏值

小米oj—字串拼顏值

描述
現在是拼顏值的時代。 字串也是如此,如果相鄰字元相同出現次數越多 (即 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);
	}