2023年9月7日 星期四

9/7 每日一題(列字串c在字串s的所有索引中,最短索引距離)

 Given a string s and a character c that occurs in s, return an array of integers answer where answer.length == s.length and answer[i] is the distance from index i to the closest occurrence of character c in s.

The distance between two indices i and j is abs(i - j), where abs is the absolute value function.

 

Example 1:

Input: s = "loveleetcode", c = "e"
Output: [3,2,1,0,1,0,0,1,2,2,1,0]
Explanation: The character 'e' appears at indices 3, 5, 6, and 11 (0-indexed).
The closest occurrence of 'e' for index 0 is at index 3, so the distance is abs(0 - 3) = 3.
The closest occurrence of 'e' for index 1 is at index 3, so the distance is abs(1 - 3) = 2.
For index 4, there is a tie between the 'e' at index 3 and the 'e' at index 5, but the distance is still the same: abs(4 - 3) == abs(4 - 5) = 1.
The closest occurrence of 'e' for index 8 is at index 6, so the distance is abs(8 - 6) = 2.

Example 2:

Input: s = "aaab", c = "b"
Output: [3,2,1,0]

 

Constraints:

  • 1 <= s.length <= 104
  • s[i] and c are lowercase English letters.
  • It is guaranteed that c occurs at least once in s.


class Solution:
    def shortestToChar(self, s: str, c: str) -> List[int]:
        res=[]
        for n,i in enumerate(s):
            if i == c:
                res.append(n)
        print(f'c出現的索引={res}')
        ans=[]
        if len(res) == 1:
            for i in range(len(s)):
                min_dis=abs(i-res[0])
                ans.append(min_dis)
            return ans

        n=0
        for i in range(len(s)):
            while n<len(res) and i>res[n]:
                n+=1
            if n == 0:
                min_dis=abs(i - res[0])
            elif n == len(res):
                '處理出界情況'
                min_dis=abs(i - res[-1])
           
            else:
                min_dis=min(abs(i - res[n-1]),abs(i - res[n]))
           

           
            ans.append(min_dis)
           
               
        print(f'ans={ans}')
        return ans
           
---------------------------------

class Solution:
    def shortestToChar(self, s: str, c: str) -> List[int]:
        o=[]
        a=[]
        for i in range(len(s)):
            if(s[i]==c):
                a.append(i)
        j=0
        for i in range(len(s)):
            if s[i]==c:
                o.append(0)
                j+=1
            elif i<a[0]:
                o.append(abs(i-a[0]))
            elif i>a[-1]:
                o.append(abs(i-a[-1]))
            else:
                o.append(min(abs(a[j]-i),abs(a[j-1]-i)))
        return o
       

標籤:

0 個意見:

張貼留言

訂閱 張貼留言 [Atom]

<< 首頁