Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

การหาความห่างไกลที่สุดถึงตัวอักษรในสตริงด้วย C#


สร้างอาร์เรย์ 2 ตัว leftDis และ rightDis leftDis เก็บค่าระยะทางจากซ้าย rightDis เก็บค่าระยะทางจากขวา เมื่อเจอตัวอักษรเป้าหมาย บันทึกตำแหน่ง ในขั้นสุดท้ายหาค่าสูงสุด (Max) ของทั้งสองอาร์เรย์

Time Complexity: O(N)

Space Complexity: O(N)

ตัวอย่างโค้ด

public class Arrays
{
    public int[] LongestDistanceToCharacter(string s, char c)
    {
        int n = s.Length;
        int[] leftDis = new int[n];
        int[] rightDis = new int[n];
        // เริ่มต้นค่า
        for (int i = 0; i < n; i++)
        {
            leftDis[i] = int.MinValue;
            rightDis[i] = int.MaxValue;
        }
        // สแกนจากซ้ายไปขวา
        int count = int.MaxValue;
        for (int i = 0; i < n; i++)
        {
            if (s[i] == c)
            {
                count = 0;
                rightDis[i] = count;
            }
            else if (count != int.MaxValue)
            {
                count++;
                rightDis[i] = count;
            }
        }
        // สแกนจากขวาไปซ้าย
        count = int.MaxValue;
        for (int i = n - 1; i >= 0; i--)
        {
            if (s[i] == c)
            {
                count = 0;
                leftDis[i] = count;
            }
            else if (count != int.MaxValue)
            {
                count++;
                leftDis[i] = count;
            }
        }
        // หาค่าสูงสุด
        int[] ans = new int[n];
        for (int i = 0; i < n; i++)
        {
            ans[i] = Math.Max(leftDis[i], rightDis[i]);
        }
        return ans;
    }
}

static void Main(string[] args)
{
    Arrays s = new Arrays();
    string str = "lovecode";
    char c = 'e';
    var res = s.LongestDistanceToCharacter(str, c);
    foreach (var item in res)
    {
        Console.WriteLine(item);
    }
}

ผลลัพธ์

2147483647
2147483647
2147483647
0
3
2
3
0

หมายเหตุ: ผลลัพธ์แสดง int.MaxValue/MinValue เพราะตัวอักษร 'e' ไม่ปรากฏทางด้านซ้ายของ index 0-2 โค้ดต้นฉบับมีข้อบกพร่องในการเริ่มต้นค่าและคำนวณระยะทาง "ไกลที่สุด" ควรปรับ منطقให้เหมาะสม