معکوس کردن یک رشته در جاوا

معکوس کردن یک رشته در جاوا

توی این پست تصمیم گرفتم یکی از سوالات تقریبا ساده‌ای که گاهی توی مصاحبه‌ها مخصوصا برای شرکت‌های خارجی پرسیده میشه رو با هم مرور کنیم. توی این سوال به ما یک رشته میدن و میگن اون رو معکوس کن. سوال سختی به نظر نمیاد و احتمالا شما هم مثل من با خوندنش جواب تقریبی رو میدونید. توی ادامه‌ی این مطلب چند روش برای جواب دادن به این سوال رو میبینیم.


۱- روش مرسوم

هیچ چیز عجیبی توی این روش نیست. رشته رو تقسیم می کنیم و با یه حلقه‌ی For اون رو معکوس می کنیم:

public String doReverse(String input) {
    String[] inputArray = input.split("");
    StringBuilder output = new StringBuilder();
    for (int i = inputArray.length - 1; i > 0; i--)
        output.append(inputArray[i]);
    return output.toString();
}

اما StringBuilder چیه؟ توی روش بعدی یکم بیشتر در موردش می خونیم، اما الان بیاید یکم روش بالا رو تمیزتر کنیم. توی جاوا ما می‌تونیم با اسفاده از toCharArray رشته رو مستقیما به آرایه‌ای از کاراکترها تبدیل کنیم:

public String secondSolution(String input) {
StringBuilder reverseInput = new StringBuilder();
for (int i = input.toCharArray().length - 1; i >= 0; i--) {
reverseInput.append(input.toCharArray()[i]);
}
return reverseInput.toString();
}

۲- روش زرنگی

این روش یه جورایی راحت ترین روش محسوب میشه، به شرطی که یه دانش کوچیک از StringBuilder توی جاوا داشته باشیم. این کلاس به طور خلاصه برای کار با مجموعه کاراکترها استفاده میشه. اگر دوست دارید بیشتر با این کلاس آشنا بشید اینجا رو بخونید. بیاید با هم کد رو ببینیم:

public String cheatSolution(String input){
return new StringBuilder(input).reverse().toString();
}

۳- روش بازگشتی

میتونید یکم خلاق باشید و به طرف مقابلتون بفهمونید که ‘آره، منم دستی بر آتش دارم!’

public String recursiveWay(String s) {
if (s.isEmpty())
return s;
return recursiveWay(s.substring(1)) + s.charAt(0);
}

۴- استفاده از XOR

توی موارد خیلی محدود شاید به ما بگن با استفاده از xor یک رشته رو معکوس کنید. عملگر این کار توی جاوا ^ هستش. قبل از دیدن جواب بیاید یه مثال ببینیم با هم :

Car car = Car.dieselAndManualCar();
boolean dieselXorManual = (car.isDiesel() && !car.isManual()) || (!car.isDiesel() && car.isManual());

میبینیم که یکم دستور ما طولانی شده. بیاید با xor کوتاهش کنیم:

Car car = Car.dieselAndManualCar();
boolean dieselXorManual = car.isDiesel() ^ car.isManual();

حالا که فهمیدیم سیستم کلی این روش چیه، بیاید جواب سوال رو ببینیم:

    public String reverseString(String s) {
        byte[] bytes = s.getBytes();
        int i = 0;
        int j = s.length() - 1;
        while (i < j) {
            bytes[i] = (byte) (bytes[i] ^ bytes[j]);
            bytes[j] = (byte) (bytes[i] ^ bytes[j]);
            bytes[i] = (byte) (bytes[i] ^ bytes[j]);
            i++;
            j--;
        }
        return new String(bytes);
    }

میبینیم که به طور خلاصه از ابتدا و انتهای رشته به سمت هم حرکت می‌کنیم و بیت‌هاشون رو با هم عوض می کنیم.

همونطور که با هم دیدیم برای یه سوال به ظاهر ساده چه جواب‌های متفاوتی وجود داره. سعی می‌کنم از این به بعد سوالاتی که تو مصاحبه‌ها اومده رو اینجا قرار بدم، امیدوارم که خوشتون بیاد.

۱ دیدگاه On معکوس کردن یک رشته در جاوا

جوابی بنویسید:

آدرس ایمیل شما به صورت عمومی منتشر نخواهد شد.

فوتر سایت

اسلایدر سایدبار