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著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.問題を解く:
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;
    }
}

ここではあまり説明する必要はありません.上の注釈には明記されています.