牛客NC371 验证回文字符串(二)【简单 双指针 C++/Java/Go/PHP】

题目

在这里插入图片描述
题目链接:
https://www.nowcoder.com/practice/130e1a9eb88942239b66e53ec6e53f51

思路

直接看答案,不难

参考答案C++

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param str string字符串
     * @return bool布尔型
     */
    bool palindrome(string str) {
        // 双指针
        int n = str.size();
        int L = 0;
        int R = n - 1;
        int diff = 0; //可以删除的数量
        while (L <= R) {
            if (str[L] == str[R]) {
                L++;
                R--;
            } else {
                if (diff > 0) return false;

                if (str[L + 1] == str[R]) {
                    L++;
                    diff++;
                } else if (str[L] == str[R - 1]) {
                    R--;
                    diff++;
                } else {
                    return false;
                }
            }
        }
        return true;
    }
};

参考答案Java

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param str string字符串
     * @return bool布尔型
     */
    public boolean palindrome (String str) {
        //双指针
        int n = str.length();
        int L = 0, R = n - 1;
        int diff = 0;
        while (L <= R) {
            if (str.charAt(L) == str.charAt(R)) {
                L++;
                R--;
            } else {
                if (diff > 0) return false; //不止有1个位置的值不一样
                if (str.charAt(L + 1) == str.charAt(R)) {
                    L++;
                    diff = 1;
                } else if (str.charAt(L) == str.charAt(R - 1)) {
                    R--;
                    diff = 1;
                } else {
                    return false;  //忽略掉2个还是不行,返回false
                }
            }
        }

        return true;
    }
}

参考答案Go

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param str string字符串
 * @return bool布尔型
 */
func palindrome(str string) bool {
	//双指针
	n := len(str)
	L := 0
	R := n - 1

	diff := 0 //可以删除的个数
	for L <= R {
		if str[L] == str[R] {
			L++
			R--
		} else {
			if diff > 0 {
				return false
			}

			if str[L+1] == str[R] {
				L++
				diff++
			} else if str[L] == str[R-1] {
				R--
				diff++
			} else {
				return false
			}
		}
	}

	return true
}

参考答案PHP

<?php


/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param str string字符串 
 * @return bool布尔型
 */
function palindrome( $str )
{
     // 双指针
    $n = strlen($str);
    $L=0;
    $R= $n-1;
    $diff = 0;

    while ($L<=$R){
        if($str[$L]==$str[$R]){
            $L++;
            $R--;
        }else{
            if($diff >0) return false;
            if($str[$L+1] == $str[$R]){
                $L++;
                $diff++;
            }else if($str[$L] == $str[$R-1]){
                $R--;
                $diff++;
            }else{
                return false;
            }
        }

    }
    return true;
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵长辉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值