LeetCode-821.文字の最短距離(JAVA)
5526 ワード
文字列Sと文字Cが与えられる.文字列S中の各文字から文字列S中の文字Cまでの最短距離を表す配列を返す.
例1:
入力:S=「loveleetcode」、C=「e」出力:[3,2,1,0,1,0,0,1,2,2,1,0]
説明:
1.文字列Sの長さ範囲は[1,10000]である.2.Cは1文字であり、文字列Sの文字であることを保証する.3.SとCのすべてのアルファベットは小文字です.
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/shortest-distance-to-a-character著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.問題を解く:
ここではあまり説明する必要はありません.上の注釈には明記されています.
例1:
入力:S=「loveleetcode」、C=「e」出力:[3,2,1,0,1,0,0,1,2,2,1,0]
説明:
1.文字列Sの長さ範囲は[1,10000]である.2.Cは1文字であり、文字列Sの文字であることを保証する.3.SとCのすべてのアルファベットは小文字です.
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/shortest-distance-to-a-character著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.問題を解く:
class Solution {
public int[] shortestToChar(String S, char C) {
int [] ans = new int [S.length()];
int l = S.indexOf(C), r = S.indexOf(C,l+1);
// C
// 0 , index
for (int i = 0;i<S.length();++i){
//
ans[i] = Math.abs(l-i);
// ,
if (r!=-1){
ans[i] = Math.min(ans[i],r-i);
// , , , C
if (i == r){
ans[i]=0;
l = r;
r = S.indexOf(C, l+1);
}
}
}
return ans;
}
}
ここではあまり説明する必要はありません.上の注釈には明記されています.