验证回文串

 

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class exp1

{

   static boolean panduan(String str)

                             {

                for (int i = 0; i < str.length(); i++)

                {

                        if((str.charAt(i)>='a'&&str.charAt(i)<='z'||str.charAt(i)>='A'&&str.charAt(i)<='Z')&&(str.charAt((str.length()-i)-1))>='a'&&str.charAt((str.length()-i)-1)<='z'||str.charAt((str.length()-i)-1)>='A'&&str.charAt((str.length()-i)-1)<='Z')

                       {

                          if (str.charAt(i) != str.charAt((str.length() - i)-1)&&(str.charAt(i)-str.charAt((str.length()-i)-1))%32!=0)

                           return false;
        }
        else

        {
            i++;

             if (str.charAt(i) != str.charAt((str.length() - i)-1)&&(str.charAt(i)-str.charAt((str.length()-i)-1))%32!=0)

             return false;
         }


                }

                return true;

 }

   public static void main(String[] args)

   {


      JFrame frame=new JFrame();

     String str= JOptionPane.showInputDialog("请输入字符串");

 if(panduan(str)==false)

         JOptionPane.showMessageDialog(frame,str+"不是回文串");

 else
  JOptionPane.showMessageDialog(frame,str+"是回文串");

 

   }

}

### PTA 验证回文串算法实现 PTA 中验证回文串的任务通常涉及判断给定字符串是否为回文结构。以下是基于 C++ 的一种高效实现方式,其核心逻辑来源于双指针方法[^3]。 #### 算法描述 1. 使用两个指针 `left` 和 `right` 分别指向字符串的起始和结尾。 2. 跳过所有非字母数字字符,直到找到有效的比较对象。 3. 对于有效字符,将其统一转为小写后进行对比。 4. 如果发现任意一对字符不匹配,则立即返回 `false`;如果全部匹配成功,则最终返回 `true`。 #### 代码实现 以下是一个完整的 C++ 版本实现: ```cpp #include <iostream> #include <cctype> // 提供 isalnum 和 tolower 函数 using namespace std; bool isPalindrome(const string& s) { int left = 0; int right = s.size() - 1; while (left < right) { // 左侧跳过非字母数字字符 while (left < right && !isalnum(s[left])) { left++; } // 右侧跳过非字母数字字符 while (left < right && !isalnum(s[right])) { right--; } // 比较当前左右两侧的有效字符 if (tolower(s[left]) != tolower(s[right])) { return false; // 若不同则不是回文 } // 移动指针继续检查下一组字符 left++; right--; } return true; // 所有对应字符均相同则是回文 } int main() { string input; getline(cin, input); // 获取一行输入数据 if (isPalindrome(input)) { cout << "Yes" << endl; } else { cout << "No" << endl; } return 0; } ``` 此程序能够处理各种边界情况,例如空字符串、仅含特殊符号的情况以及大小写字母混合的情形[^3]。 #### 测试案例解析 - **测试用例 1**: 输入 `"level"`,输出 `"Yes"`。解释:该字符串正向逆向一致,因此是回文串[^5]。 - **测试用例 2**: 输入 `"1 + 2 = 2 + 1 ="`,输出 `"No"`。解释:去除无关字符后得到序列 `12=21=`,显然前后不对称[^5]。 --- ### Python 实现补充 对于熟悉 Python 的开发者来说,也可以采用更简洁的方式完成同样功能: ```python def is_palindrome(s: str) -> bool: filtered_chars = [char.lower() for char in s if char.isalnum()] return filtered_chars == filtered_chars[::-1] # 主函数调用部分 if __name__ == "__main__": test_str = input().strip() print("Yes" if is_palindrome(test_str) else "No") ``` 上述脚本通过列表推导式快速过滤掉非法字符并构建新的纯字母数字序列,最后利用切片技术轻松判定两者关系[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值